【问题标题】:Get specefic value from ResponseEntity Resttemplate从 ResponseEntity Resttemplate 获取特定值
【发布时间】:2022-01-03 23:25:58
【问题描述】:

我正在打这个电话

ResponseEntity<String> response = new RestTemplate().exchange(url, HttpMethod.GET, request, String.class);
        String json = response.getBody();

这将返回以下 json

{
  "id": "T-5IB4VHCDNJs9AAQr31zQlKRjfA0WEnMe1pLrp5irXRRnw",
  "accountId": "qi0oxfBt0C968y6ku1rsxWeqSDolBFWYRlLgxVTo5FHVIeQ",
  "puuid": "HDzjdaStxhHcceGGd8qJcc4Vw45FOlOQ1PNXKQ0h9_iqfwHP3oI0spl1bLUOw_7_J49vzaIKylv5Vg",
  "name": "King yibz",
  "profileIconId": 4072,
  "revisionDate": 1639613941000,
  "summonerLevel": 221
}

什么是只返回summonerLevel 值的最佳方式?

【问题讨论】:

    标签: java spring api


    【解决方案1】:

    如果我们不想映射完整的响应结构,)请看这里:RestTemplate and acessing json

    如果你的RestTemplate配置了默认的HttpMessageConverters,由Jackson2ObjectMapperBuilder提供,你可以直接从restTemplate.getForObject(/getForEntity/exchange/put/)得到一个JsonNode发布/补丁/...)。

    现在它将是MappingJackson2HttpMessageConverter [ref],但我们仍然可以获得(com.fasterxml.jackson.databind.)JsonNode 之类的:

    ResponseEntity<JsonNode> response = new RestTemplate().exchange(
      url, 
      HttpMethod.GET, 
      request, // ??
      JsonNode.class
    ); // in a GET request parameters are normally in URL!, so we could:
    // ResponseEntity<JsonNode> resultEnt = restTemplate.getForEntity(url+queryString, JsonNode.class);
    // Or if we don't need the ResponseEntity at all (status, header, ...), just:
    // JsonNode resultObj = restTemplate.getForObject(url + query, JsonNode.class);
    JsonNode json = response.getBody();
    

    然后我们可以像这样提取“summonerLevel”:

    int summonerLevel = json.findValue("summonerLevel").asInt(); // (more) exceptions possible!
    

    请记住:

    从 (spring(-web)) 5.0 开始,RestTemplate 处于维护模式,仅接受少量更改和错误请求。请考虑使用WebClient,它提供了更现代的 API 并支持同步、异步和流式处理方案。

    参考:

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多