2017-05-04 111 views
1

如何獲得HTTP請求獲取請求的主體?javax.ws.rs庫?如何正確獲取WebTarget獲取請求響應(JAX-RS)的正文?

我想:

Response response = service.path(path).request().get(); 
String body = response.readEntity(String.class); 

,但不起作用。相反,我得到這個異常:java.lang.NoClassDefFoundError: javax/ws/rs/core/NoContentException

然後我想:

Response response = service.path(path).request(MediaType.APPLICATION_JSON_TYPE).get(); 
String body = response.readEntity(JSONObject.class); 

,因爲我實際上應該得到一個JSON字符串返回,但我並不需要它作爲JSON對象,這就是之所以我嘗試過像以前一樣。

但是,這並不在所有的工作,我甚至無法編譯,並獲得(的IntelliJ)消息 no instance(s) of type variable(s) exist so that JSONObject conforms to String inference variable T has incompatible bounds: equality constraints: JSONObject upper bounds: Object, String

增加:

我得到200響應狀態,所以一切工作得很好,當我做同樣的例如郵遞員或提琴手它的作品。

回答

0

您可以使用傑克遜這樣做:首先你創建身體

對象
ObjectMapper mapper = new ObjectMapper(); 
InputStream responseBody = response.getBody().in(); 
JSONObject jsonobject = mapper.readValue(responseBody, JSONObject.class); 

然後變換JSONObject的字符串:

String jsonInString = mapper.writeValueAsString(jsonobject); 
+0

我不想爲了那個而使用另一個庫,而getBody()方法甚至不存在。 –

+0

是的,它不存在,它是改造庫的功能。 你可以嘗試Response.readEntity(InputStream.class)來獲得body inputstream。 要轉換爲字符串我沒有其他的解決方案,沒有使用外部庫,傑克遜是真棒,如此有用做這樣的事情相關的JSON。 –

0

在這種特定的情況下,它也應該

工作
Response response = service.path(path).request(MediaType.APPLICATION_JSON_TYPE).get(); 

String body = response.readEntity(String.class);

因爲它試圖讀取實體並從中構造給定類型的對象。所以我認爲這應該工作。