如何正确获取WebTarget获取请求响应(JAX-RS)的主体?

时间:2017-05-04 20:30:38

标签: java json web-services intellij-idea jax-rs

如何使用 javax.ws.rs 库获取HTTP get请求的正文?

我尝试过:

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作为响应状态,所以一切正常,当我做同样的事情,例如邮差或Fiddler有效。

2 个答案:

答案 0 :(得分:0)

你可以通过使用Jackson来做到这一点:首先你从身体创建对象

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

然后将jsonobject转换为string:

String jsonInString = mapper.writeValueAsString(jsonobject);

答案 1 :(得分:0)

在这种特定情况下,它也应该与

一起使用
Response response = service.path(path).request(MediaType.APPLICATION_JSON_TYPE).get();

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

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