如何从 RestTemplate 获取 JSON 值
How to get JSON value from RestTemplate
我想从 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 的值?
用库(例如 Jackson)解析 JSON 并获取 token
字段。
String json = restTemplate.getForObject(url, String.class);
ObjectMapper mapper = new ObjectMapper();
return mapper.readTree(json).get("token").asText();
当您说 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
和 brand-new Java 记录功能可以帮助创建这样的 类,几乎没有样板文件。
我想从 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 的值?
用库(例如 Jackson)解析 JSON 并获取 token
字段。
String json = restTemplate.getForObject(url, String.class);
ObjectMapper mapper = new ObjectMapper();
return mapper.readTree(json).get("token").asText();
当您说 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
和 brand-new Java 记录功能可以帮助创建这样的 类,几乎没有样板文件。