Java Springboot, кодирование номера результата RestTemplate

#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