【问题标题】:How to get JSON value from RestTemplate如何从 RestTemplate 获取 JSON 值
【发布时间】:2020-08-03 14:11:17
【问题描述】:

我想从 RestTemplate 请求中检索 JSON 文件的值。不幸的是,我不知道如何进行。我正在使用以下方法:

RestTemplate restTemplate = new RestTemplate();
final String url = "http://localhost:3333/command/core/get-csrf-token";

public String getToken() {
    String token = restTemplate.getForObject(url, String.class);
    System.out.println(token);
    return token;

我得到一个字符串作为输出{"token":"myToken"}

是否可以直接检索 JSON 的值?

【问题讨论】:

  • 您可以使用ObjectMapper 将其映射到Java 对象。

标签: java json resttemplate


【解决方案1】:

使用库(例如 Jackson)解析 JSON 并获取 token 字段。

String json = restTemplate.getForObject(url, String.class);
ObjectMapper mapper = new ObjectMapper();
return mapper.readTree(json).get("token").asText();

【讨论】:

    【解决方案2】:

    当您说String.class 时,您是在要求 RestTemplate 将结果作为字符串提供给您。相反,您可以执行以下任一操作:

    class TokenHolder {
        String token;
    }
    
    TokenHolder holder = restTemplate.getForObject(url, TokenHolder.class);
    holder.getToken();
    

    // this is necessary because of generic type erasure
    private static final ParameterizedTypeReference<Map<String, String>> MAP_TYPE = 
         new ParameterizedTypeReference<Map<String, String>>() {};
    
    Map<String, String> map = restTemplate.getForObject(url, MAP);
    map.get("token");
    

    “强类型”TokenHolder 通常更可取。 Lombok 的 @Value 和全新的 Java Record 功能可以帮助创建此类样板文件很少的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 2021-11-15
      • 2020-10-07
      • 2021-06-17
      相关资源
      最近更新 更多