【问题标题】:How to properly get the body of a WebTarget get request response (JAX-RS)?如何正确获取 WebTarget 获取请求响应 (JAX-RS) 的正文?
【发布时间】:2017-05-04 20:30:38
【问题描述】:

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

我试过了:

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 作为响应状态,所以一切正常,当我在例如邮递员或提琴手都可以。

【问题讨论】:

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


    【解决方案1】:

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

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

    然后将jsonobject转换为字符串:

    String jsonInString = mapper.writeValueAsString(jsonobject);
    

    【讨论】:

    • 我不想仅仅为此使用另一个库,而且 getBody() 方法甚至都不存在。
    • 是的,它不存在,它是改造库的功能。您可以尝试 Response.readEntity(InputStream.class) 来获取正文输入流。要转换为字符串,如果不使用外部库,我没有其他解决方案,Jackson 非常棒,对于做与 json 相关的事情非常有用。
    【解决方案2】:

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

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

    字符串主体 = response.readEntity(String.class);

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

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      相关资源
      最近更新 更多