2016-04-19 18 views
0

基本的な認証を使用するいくつかのAPIにjsonデータを送りたいと思います。これは私のコードです:javawsの投稿からの応答を得るにはplayframework 2.5

@Inject 
WSClient ws; 
public Result testWS(){ 
JsonNode task = Json.newObject() 
      .put("id", 123236) 
      .put("name", "Task ws") 
      .put("done", true); 

WSRequest request = ws.url("http://localhost:9000/json/task").setAuth("user", "password", WSAuthScheme.BASIC).post(task); 
return ok(request.tojson); 

質問は、私はJSONにそれ以上のプロセスWSからのリターンを得る方法ですか?そのコードはまだエラーです。私はplayframeworkを使用しています

答えて

0

.post(task)の結果はCompletionStage<WSResponse>になりますので、toJsonを呼び出すことはできません。あなたは完了段階から最終的な応答を得る必要があります(それを約束と考える)。メソッドシグネチャの変更にも注意してください。

import java.util.concurrent.CompletionStage; 
import javax.inject.Inject; 
import javax.inject.Singleton; 
import com.fasterxml.jackson.databind.JsonNode; 
import play.libs.Json; 
import play.libs.ws.WSAuthScheme; 
import play.libs.ws.WSClient; 
import play.libs.ws.WSResponse; 
import play.mvc.Controller; 
import play.mvc.Result; 
import scala.concurrent.ExecutionContextExecutor; 

@Singleton 
public class FooController extends Controller { 

    private final WSClient ws; 
    private final ExecutionContextExecutor exec; 

    @Inject 
    public FooController(final ExecutionContextExecutor exec, 
          final WSClient ws) { 
     this.exec = exec; 
     this.ws = ws; 
    } 

    public CompletionStage<Result> index() { 
     final JsonNode task = Json.newObject() 
            .put("id", 123236) 
            .put("name", "Task ws") 
            .put("done", true); 

     final CompletionStage<WSResponse> eventualResponse = ws.url("http://localhost:9000/json/task") 
                   .setAuth("user", 
                     "password", 
                     WSAuthScheme.BASIC) 
                   .post(task); 

     return eventualResponse.thenApplyAsync(response -> ok(response.asJson()), 
               exec); 
    } 
} 

Webサービスへの非同期呼び出しの処理の詳細については、documentationを参照してください。

+0

「地図」と「toJson」の色です。私はそれを実行します。表示エラー: シンボル シンボルを見つけることができません: 場所:変数java.util.concurrent.CompletionStageのeventualResponse rizrusn

+0

申し訳ございませんが、私は私の頭の中に古い 'F.Promise' APIを使ってこれをメモリから書きました。私は、正しいメソッド呼び出しで答えを更新しました。 –

+0

エラーがありますが、AsyncController:無効なメソッド宣言です。返品のタイプが必要です – rizrusn

関連する問題