リクエストの作成は簡単です。最初にURLを指定します。コンテンツタイプ、クエリパラメータ、タイムアウトなどをリクエストに追加するには、さまざまな方法があります。次に、要求タイプを選択し、必要に応じて送信するコンテンツを追加します。例:
WSRequestHolder request = WS.url("http://example.com");
request.setQueryParameter("page", "1");
Promise<Response> promise = request.get();
Promise<Response> promise = WS.url("http://example.com").post(content);
複雑な部分は、それを送信し、リクエストの応答を使用することです。 Webサービスの応答に基づいて、ユーザーにResult
を返すコントローラがあると仮定します。結果は、通常レンダリングされたテンプレートか、単なるステータスコードかもしれません。
再生は、Futures and Promisesを使用してブロックしないようにします。コントローラのasync
メソッドはPromise<Result>
で、ある時点で結果(将来の値)を返します。上記のget
とpost
の方法で、使いやすい約束が提供されます。その実装について気にする必要はありませんが、要求が完了したらResponse
を提供することを約束するだけです。
お知らせここで問題:WS.url("...").get()
で要求を作成する場合async
がPromise<Result>
を取るPromise<Response>
にもかかわらず、それはあなたを与えるだろう。ここでは、別の約束を自分で実装しなければなりません。これは、map
メソッドを使用して結果への応答を変換します。 Playのドキュメントに従えば、Javaはクロージャ(まだ)を持っておらず、すべてがクラスにラップされなければならないので、これはちょっと混乱します。メソッド呼び出しの中で匿名クラスを使う必要はありません。あなたはより多くのクリーンなコードを好む場合、あなたはまた、このようにそれを行うことができます。
return async(
request
.get() // returns a `Promise<Response>`
.map(resultFromResponse) // map takes a `Function<Response, Result>` and
// returns the `Promise<Result>` we need
);
を対象resultFromResponse
は、以下のように見えることがあります。実際には、引数としてのみResponse
をとり、Result
を返すコールバックメソッドの厄介な定義と同じです。
Function<Response, List<T>> resultFromResponse =
new Function<Response /* 1st parameter type */, Result /* return type */>() {
@Override
public Result apply(Response response) {
// example: read some json from the response
String message = response.asJson().get("message");
Result result = ok(message);
return result;
}
};
@itsjeydはcalling webservices in Play 2.2.xあなたが任意のよりasync
で呼び出しをラップしていない場合、コメントで指摘したように。あなたは、単に返すPromise<Result>
:
public static Promise<Result> index() {
return request.get().map(resultFromResponse);
}
この投稿はありませんまっすぐに複製が、私は信じて、非常に似ていますhttp://stackoverflow.com/questions/4379485/restful-on-play-framework - と組み合わせます遊び! ToDo Listの例とそれはあなたに確かな出発点を与えるはずです。 – pfairbairn
回答はありがとうございました。質問は2010年に尋ねられたので、私は、プレイ2は、2012年にリリースされただけなので、フレームワークバージョン1を再生することを意味していると想定しています。しかし、私は間違っている可能性があり、投稿をダブルチェックします。私はここでもベストプラクティスに重点を置いています。 – Hegemon
公平な点ですが、Java Play 2.1のToDoリスト、http://www.playframework.com/documentation/2.1.x/JavaTodoListを参照すると、HTTPリクエストに対するPOST、GET、PUTを使用したルーティングに関する情報は、たとえそれが幾分日付が付いていても、SOの投稿をまだ役に立つように見えるようにする。 – pfairbairn