com.sun.jersey.api.client.WebResource.Builder.get方法是否会等待响应?

时间:2017-05-05 06:26:42

标签: java jersey-client

我正在研究jersey-client 1.19。我有这些代码行向服务器提交请求并获得响应:

Client client = Client.create();

WebResource webResource = client.resource("http://localhost:8080/RESTfulExample/rest/json/metallica/post");
String input = "{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}";

ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);

if (response.getStatus() != 201) {
    throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}

我有一个问题,当post方法执行时,如果与服务器的连接有问题(慢速互联网连接将在3分钟后响应),那么代码if (response.getStatus() != 201)将继续运行或将等待对于来自post执行的响应?

1 个答案:

答案 0 :(得分:1)

以下行是对服务器的blocking (synchronous)调用 -

ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);

这意味着此行等待服务器响应。在此行之后程序执行将不会继续,直到从服务器收到一些成功/错误响应。

这意味着在此行之后编写的代码 -

if (response.getStatus() != 201) {
    throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}

它将等待前一行的完整执行(post方法响应)。

有关信息,Jersey还支持non-blocking (asynchronous)对服务器的调用。有关详细信息,请查看here。另外,我建议不要使用jersey的旧版本。当前版本为2.5.1,jersey 1.x and 2.x

之间存在很多差异