.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 サービスへの非同期呼び出しの操作の詳細については、ドキュメントを確認してください。