#java #spring-boot #resttemplate #rfc
#java #весенняя загрузка #resttemplate #rfc
Вопрос:
У меня есть API, который считывает данные из OracleDB. Если я вызываю это напрямую, оно возвращает:
{
...
...
numericField: 910010000346422907
...
otherNumericField: 2018020800
...
}
но если я вызову это через сервер springboot java, используя
URI targetUrl= UriComponentsBuilder.fromUriString(url)
.queryParams(queryParameters)
.build()
.encode()
.toUri();
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(targetUrl, String.class);
значения в строке результата выглядят следующим образом
numericFiled: 9.1001000034642291E17 .... otherNumericField: 2.0180208E9
api возвращает Content-Type application/json; charset=UTF-8
. Как я мог бы правильно прочитать числовое значение правильно?
Комментарии:
1. Почему вы преобразуете объект в строку? Это должно быть что-то вроде RestTemplate.getForObject(targetUrl, YourObj.class );
2. Я хотел бы проанализировать json, не зная, как это делается раньше, у меня нет ни YourObj.class
Ответ №1:
Вам нужно создать класс POJO со всеми свойствами, что-то вроде этого, вы можете использовать lombok для создания Getters
и Setters
для вас с помощью аннотаций lombok
public class ResponseData {
private double numericFiled
private double otherNumericField
// Getters and Setters
}
И в getForObject
вызове просто передайте Class
тип
ResponseData result = restTemplate.getForObject(targetUrl, ResponseData.class);
Если вы не знаете схему JSON, тогда используйте Map<Object,Object> map
, но всегда рекомендуется синтаксический анализ для моделирования, и вы также можете игнорировать поля, которые вам не нужны и которые вы не знаете
Комментарии:
1. Что, если я не знаю заранее схему объекта, но я уверен, что найду эти числовые поля?
2. проверьте мой обновленный комментарий в ответе @tommasoballardini
3. можете ли вы показать ответ JSON и
ResponseData
@tommasoballardini