Как получить значение JSON из RestTemplate - PullRequest
0 голосов
/ 03 августа 2020

Я хотел бы получить значение файла JSON из запроса RestTemplate. К сожалению, я не знаю, что делать дальше. Я использую следующий метод:

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?

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Разберите JSON с помощью библиотеки (например, Jackson) и возьмите поле token.

String json = restTemplate.getForObject(url, String.class);
ObjectMapper mapper = new ObjectMapper();
return mapper.readTree(json).get("token").asText();
0 голосов
/ 03 августа 2020

Когда вы говорите 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 обычно предпочтительнее. @Value Lombok и совершенно новая функция Java Record могут помочь создать такие классы с небольшими шаблонами.

...