我是 Play 框架的新手,并尝试使用 JavaWS 调用 RESTful API。我一直在为此苦苦挣扎。这是我到目前为止所拥有的:
此代码基于 JavaWS 文档(我发现它很混乱),旨在发出请求。我认为它的工作原理是恢复“ok”结果的完成阶段,其中包含一个字符串,该字符串是将响应转换为文本的结果。
import javax.inject.Inject;
import com.fasterxml.jackson.databind.JsonNode;
import play.mvc.*;
import play.libs.ws.*;
import java.util.concurrent.*;
import static play.mvc.Results.ok;
public class MyClient implements WSBodyReadables, WSBodyWritables {
private final WSClient ws;
@Inject
public MyClient() {
this.ws = ws;
}
public CompletionStage<Result> index() {
return ws.url("http://example.com").get().thenApply(response ->
ok(response.asText())
);
}
}
然后从控制器调用此代码:
public Result call(){
MyClient client = new MyClient();
try {
return client.index()
.toCompletableFuture()
.get();
} catch(Exception e){
Logger.error("ah fuck");
}
return internalServerError();
}
我目前收到一条错误消息,上面写着“变量 ws 可能尚未初始化”,这是有道理的,因为我没有初始化 ws。我无法弄清楚如何正确初始化 WSClient 实例,也无法真正理解之后会发生什么。任何帮助将不胜感激。
谢谢。