2017-05-04 65 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);

因为它试图读取实体并从中构造给定类型的对象。所以我认为这应该工作。