[英]how to get response from post in javaws playframework 2.5
请帮助我,我想将json数据发送到一些使用基本身份验证的API,我想从该API捕获响应。 这是我的代码:
@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);
问题是我如何从上面的ws返回收益并将其处理为json? 因为该代码仍然错误。 我正在使用playframework 2.5
.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服务进行异步调用的更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.