2016-09-01 233 views
2

我需要創建一個Http客戶端,以使用WLP提供的JAXRS客戶端API(lib:javax.ws.rs.client。*)測試REST Web服務。我將不得不使用POST方法發送字符串請求(JSON消息)並接收字符串響應(JSON消息)。如果有人有類似的Java代碼(Class)和必要的導入來完成這項任務,我將不勝感激。在Websphere Liberty Profile中使用JAXRS客戶端API(POST請求)的Http客戶端

PS:我開始編碼的Java類,但我不知道怎麼去迴應:

Client client = ClientBuilder.newClient(); 
WebTarget myResource = client.target("http://example.com/webapi"); 
.... 

我使用:

Websphere Liberty profile 16.0.0.2, 
jaxrs-2.0 [1.0.0] 
jaxrsClient-2.0 [1.0.0] 
IDE : RDz 

回答

3

你幾乎沒有。您只需將請求數據格式化爲「實體」實例,然後將其發送到您的服務。

下面是一些用於非常簡單的JAX-RS服務的示例代碼。

import javax.ws.rs.client.Client; 
    import javax.ws.rs.client.ClientBuilder; 
    import javax.ws.rs.client.Entity; 
    import javax.ws.rs.client.WebTarget; 
    import javax.ws.rs.core.MediaType; 

    .... 

    // Set up our client and target our JAX-RS service 
    Client client = ClientBuilder.newClient(); 
    WebTarget target = client.target("http://localhost:9081/example.jaxrs/test/SimpleService"); 

    // Build our request JSON into an 'Entity'. Replace 'myData' with your JSON 
    Entity<String> data = Entity.entity("MyData", MediaType.APPLICATION_JSON_TYPE); 

    // Then send a post request to the target service 
    String result = target.request(MediaType.APPLICATION_JSON_TYPE).post(data, String.class); 
+0

您好邁克爾,謝謝回答,但我仍然有警告和錯誤:[警告] HTTP出現響應碼被破壞 [警告]攔截器{HTTP: //9.458.365.147:11491/webservice}WebClient拋出異常,立即展開 無法發送消息。 –

+0

它的工作!非常感謝邁克爾 –

0

嘗試以下,

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.Invocation; 
import javax.ws.rs.client.WebTarget; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

Client client = ClientBuilder.newClient(); 
WebTarget myResource = client.target("http://example.com/webapi"); 
Invocation.Builder invocationBuilder = myResource.request(MediaType.TEXT_PLAIN_TYPE); 
Response getResponse = invocationBuilder.get(); 
if (getResponse != null && getResponse.getStatus() == 200) { 
    String responseString = getResponse.readEntity(String.class); 
}