我是Play框架的新手,并尝试使用JavaWS调用RESTful API。我一直在为此苦苦挣扎。这是我到目前为止的内容:
此代码基于JavaWS文档(我发现这很令人困惑),并且用于发出请求。我认为它可以通过恢复“确定”结果的完成阶段来工作,该结果包含一个字符串,该字符串是将响应转换为文本的结果。
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实例,也无法真正理解之后的情况。任何帮助将不胜感激。
谢谢。
答案 0 :(得分:0)
或者,您可以使用Netflix的Feign库来创建Rest客户端。
答案 1 :(得分:0)
@rkj说对了:
注入@Inject WSClient ws;在控制器中,然后将ws实例传递给> MyClient类,然后从那里访问它。 MyClient客户=新的MyClient(this.ws);
那加上一些小错误,它奏效了。谢谢!