Java Springboot,RestTemplate结果数编码

标签 java spring-boot 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;字符集=UTF-8。我怎样才能正确读取数值?

最佳答案

你必须创建一个具有所有属性的 POJO 类,像这样,你可以使用 lombok 来创建 GettersSetters通过注释为您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 , 但总是推荐解析为模型,你也可以忽略你不需要和不知道的字段

关于Java Springboot,RestTemplate结果数编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55028106/

相关文章:

java - 无法创建服务异常 javax.xml.ws.WebServiceException :

java - setServletContext 未在 @Configuration 文件内激活

spring-boot - 如何在 Spring 启动时覆盖默认的 thymeleaf 解析器

java - 将图像从 Android 上传到我的服务器(权限被拒绝)

java - RestTemplate 自定义 Jackson JSON 反序列化器

Java:链表反向

java - 忽略对特定端点发出的请求执行的过滤器

java - 如何在 Selenium 2.0 中的动态菜单项的鼠标悬停上执行鼠标单击

spring - 无法从可选 :configserver:http//localhost:8012 加载配置数据

java - 更新包含列表的数据时,restTemplate.put 给出 "Can not deserialize instance of java.util.ArrayList out of START_OBJECT"