【问题标题】:How to get list<String> as response from jersey2 client如何从 jersey2 客户端获取 list<String> 作为响应
【发布时间】:2016-05-20 17:17:00
【问题描述】:

我想知道如何提取List&lt;String&gt; 作为来自jersey-2.0 客户端的响应。

我已经试过了,

List<String> list = client
                      .target(url)
                      .request(MediaType.APPLICATION_JSON)
                      .get(new GenericType<List<String>>(){});

但是,上面的代码不起作用。它没有返回预期的List&lt;String&gt;,而是返回null 值。

【问题讨论】:

    标签: java json jersey-2.0 jersey-client


    【解决方案1】:

    您可以将服务响应作为Response 类对象,然后使用readEntity(...) 方法解析此对象。

    这是一个快速代码sn-p:

    List<String> list = client
                          .target(url)
                          .request(MediaType.APPLICATION_JSON)
                          .get(Response.class)
                          .readEntity(new GenericType<List<String>>() {});
    /* Do something with the list object */
    

    【讨论】:

    • 我得到 size=5 但所有元素都是 null 显示在调试中。但元素存在
    • 您能否分享您尝试使用的服务的 JSON 响应?
    • 这是 json 响应 ["mumbai","delhi","calcutta"]
    • 这不是List&lt;String&gt;,而是JSONArray。有区别。
    • 谢谢,我将 jsonString 转换为 list.String listString= serviceResponse.readEntity(String.class) 并转换回 jsonArray 然后再转换为 list
    【解决方案2】:
    String listString= serviceResponse.readEntity(String.class);
    Gson gson=new Gson();
    Type type = new TypeToken<List<String>>(){}.getType();
    List<String> list = gson.fromJson(listString, type);
    

    获取响应字符串,然后使用 gson 库转换为 List

    【讨论】:

    • 这个答案出现在低质量审查队列中,大概是因为您没有提供任何代码解释。如果此代码回答了问题,请考虑在答案中添加一些解释代码的文本。这样一来,您就更有可能获得更多支持,并帮助提问者学习新知识。
    【解决方案3】:

    先添加jackson依赖

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.27</version>
    </dependency>
    

    然后创建客户端配置

    ClientConfig config = new ClientConfig();
    config.register( JacksonFeature.class );
    

    最后通过ClientConfig创建客户端

    List<String> list = ClientBuilder.newClient( config )
                   .target( uri )
                   .request()
                   .get( Response.class )
                   .readEntity( List.class );
    

    【讨论】:

    • 这会起作用,但会显示从 List 转换为 List 的未经检查的强制转换警告。使用 GenericType 的答案更准确。
    【解决方案4】:

    1) 获取您的响应,然后使用 readEntity() 方法解析响应对象。

    List<String> list = client.target(url).
    request(MediaType.APPLICATION_JSON).get(Response.class).readEntity(new GenericType<List<String>>() {
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 2023-03-03
      • 2018-12-02
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多