2017-05-05 41 views
1

我正在從事球衣客戶端1.19。我有這行代碼的提交請求,服務器並得到響應:com.sun.jersey.api.client.WebResource.Builder.get方法是否會等待響應?

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

行之後是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

之間有很多不同