2016-08-27 4 views
2

私は、Webアプリケーション内に小さなスクリプトを書く必要があります。このWebアプリケーションには限界がありますが、このオンラインコンソールと似ています:https://groovyconsole.appspot.com/ここで動作すれば、私の問題でもうまくいくはずです。GroovyでRESTレスポンスを取得する方法は?

JSONレスポンスを解析する必要があります。簡単にするために私はC#の私自身のWeb APIをで開発し、私は、ブラウザ上のリンク(http://localhost:3000/Test)を入力するときには、この文字列を与える:

{"Code":1,"Message":"This is just a test"} 

私はこの文字列を取得し、その後それを解析したい、私はJsonSplunkerと推測します。研究の時間後、最も魅力的なサンプルは、この次のようになります。(ここから撮影:http://rest.elkstein.org/2008/02/using-rest-in-groovy.html

import groovyx.net.http.RESTClient 

def client = new RESTClient('http://www.acme.com/') 
def resp = client.get(path : 'products/3322') // ACME boomerang 

assert resp.status == 200 // HTTP response code; 404 means not found, etc. 
println resp.getData() 

それはimport groovyx.net.http.RESTClientを認識しませんが。あなたは提供されたGroovy Web Sonsoleでテストを試すことができます。エラーが発生します。

私はimport groovyx.net.http.RESTClient.*を試しましたが、まだ成功しませんでした。

+1

外部JSONパーサーを使用する必要はありません。 'groovyx.net.http.RESTClient'はすでにJSONを解析した' response.data'オブジェクトを返しているようです。トップレベルのキーのリストを取得するには 'response.data.keySet()'を試してください。特定のキーの値を返す 'response.data.blah'。 – MarkHu

+0

@MarkHuコメントありがとう!私はJsonSlurperを使用しています。解析のため: inputedMemberID == resultMap ["MemberID"](例えば) –

答えて

3

オンラインサーバーにHTTP POSTを送信し、応答をJsonSlurperで解析します。

このスクリプトは、マシン上でスタンドアロンとして実行できます。おそらくオンラインのGroovy REPLでは動作しません。それは@Grab経由でクラスパスに追加されるApache HTTPClient jarを使用します。

プロジェクトでは、このメソッドを使用せず、Gradleのクラスパスにjarファイルを追加します。

+0

ありがとう!出来た。 JFYIでは、このメソッドもうまくいくかもしれません:def html = "http://google.com" .toURL()。text。私はそれをGETメソッドが必要ですが、私はあなたのスクリプトを取り、それを私のものに適応させます。私は将来的に助けが必要な可能性が高いので、ここで質問をドロップします。私もグルーヴィーに慣れておく必要があります:-) –

2

groovyx.net.http.RESTClientのインポートで問題が発生した場合は、org.codehaus.groovy.modules.http-builder:http-builderという依存関係がありません。

スタンドアロンのGroovyスクリプトを扱う場合は、GroovyのGrapeを使用して依存関係を取得できます。ここでRESTClientさんhome pageからの例です:

@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7') 
@Grab('oauth.signpost:signpost-core:1.2.1.2') 
@Grab('oauth.signpost:signpost-commonshttp4:1.2.1.2') 

import groovyx.net.http.RESTClient 
import static groovyx.net.http.ContentType.* 

def twitter = new RESTClient('https://api.twitter.com/1.1/statuses/') 
// twitter auth omitted 

try { // expect an exception from a 404 response: 
    twitter.head path: 'public_timeline' 
    assert false, 'Expected exception' 
} 
// The exception is used for flow control but has access to the response as well: 
catch(ex) { assert ex.response.status == 404 } 

assert twitter.head(path: 'home_timeline.json').status == 200 

あなたのWebアプリは、Gradleのように、依存関係のシステムを使用している場合、あなたは@Grabの代わりにそれを使用することができます。

+0

@Grabは動作しません、それは私にsintaxエラーをもたらします。おそらく、私がスクリプトを開発しているWebアプリケーションによって制限された制限が原因です。しかし、以下の答えは私を助けました、すべては今大丈夫です。あなたに感謝の答えをありがとう、ここにあなたの投票がありがとうございます。 :-) –

関連する問題