2012-05-10 12 views
2

私はGroovyを初めて使用しています。私はRESTサービスの応答からヘッダーを解析しようとしています。 文字列は以下の通りです:Groovyで文字列を解析していますか?

[http://localhost:4545/third-party-web?code=IVJZw1]

私はコードIVJZw1にしようとしています。

簡単ですが、私は速やかに助けを求めます。

azou

答えて

4

角括弧が削除されている場合は、単なるURLです。あなたが迅速かつ汚い何かをしたい場合は、正規表現を使用することができます

import java.net.* 
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]' 
def url = new URL(str.replaceFirst('^\\[', '').replaceFirst(']$', '')) 
def paramMap = url.query.split('&').collectEntries { param -> 
    param.split('=').collect { URLDecoder.decode(it) } 
} 
assert paramMap['code'] == 'IVJZw1' 
+0

を使用することができますよく知られたライブラリです次のエラーが発生します: –

+0

groovy.lang.MissingMethodException:いいえメソッドのシグネチャ:java.util.ArrayList.replaceFirst()は、引数の型に適用されます。(java.lang.String、java.lang.String)values:[^ \ [、] –

+0

何かを得るための多くの作業のようですは、等号の後に小括弧を引いたものです。 –

6

:あなたはこのような何かを試みることができる

あり
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]' 
def code = (str =~ /code=(\w*)/)[0][1] 
assert code == 'IVJZw1' 

私は「コード」パラメータは英数字で構成されていると( \w)。

ただし、URLからパラメータ値を抽出することが非常に頻繁にある場合は、このソリューションはすぐに非常に汚くなります。 ataylor suggestedのようなものは、別の機能でURLパラメータを取得するロジックを抽出できる場合は、おそらくより適切でしょう。 URLクラス自体に多分方法:D

import java.net.* 

// Retrieves the query parameters of a URL a Map. 
URL.metaClass.getQueryParams = { -> 
    delegate.query.split('&').collectEntries { param -> 
     param.split('=').collect { URLDecoder.decode(it) } 
    }.asImmutable() 
} 

// Then that method can be used directly on URLs :) 
def str = '[http://localhost:4545/third-party-web?code=IVJZw1]' 
def code = new URL(str[1..-2]).queryParams.code 
assert code == 'IVJZw1' 
0

コモンズHTTPクライアントは、クライアント側の認証、HTTP状態管理およびHTTP接続管理をサポートするJavaでHTTPエージェントの実装です。これには、ライブラリhttpclient-4.1.2.jar、httpcore-4.1.2.jar、httpmime-4.1.2.jar、httpclient-cache-4.1.2.jar、commons-codec.jarおよびcommons-logging-1.1が必要です。 1.jarはクラスパスに入る。次の例は、URIクエリパラメータを解析する方法を示しています。

API

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/utils/URLEncodedUtils.html

は、私がSOAPUIでグルーヴィースクリプトでこれを使用していますし、私はあなたが

String url = "http://www.example.com/something.html?one=11111&two=22222&three=33333"; 
List<NameValuePair> params = URLEncodedUtils.parse(new URI(url), "UTF-8"); 

for (NameValuePair param : params) { 
    System.out.println(param.getName() + " : " + param.getValue()); 
} 

出力

one : 11111

two : 22222

three : 33333

関連する問題