首页 > 编程语言 > 详细

关于springmvc 返回long类型数据前台丢失精度的问题

时间:2020-08-28 22:57:43      阅读:103      评论:0      收藏:0      [点我收藏+]

在平时开发中,遇到了一个java Long 类型字段json序列化的坑,如下:前台返回结果和数据库中真实的值后两位的精度丢失了,原因是因为js不支持long类型

技术分享图片技术分享图片

 

解决方法两种:

1.在字段中添加注解,默认将Long序列化成字符串,这样前台js接收就没有问题了(缺陷:这种办法需要每次都手动配置,非常麻烦)

@JsonSerialize(using= ToStringSerializer.class)

技术分享图片

 

 2.全局配置,在WebMvcConfigurer中配置json转换器,此种办法非常方便(缺陷:灵活度不高,对于比如微服务中互相调用,真正需要long类型传输,并且两头都能接收long类型的情况下,还需要对字符串进行转换,显然有些不灵活)

 1 import com.fasterxml.jackson.databind.ObjectMapper;
 2 import com.fasterxml.jackson.databind.module.SimpleModule;
 3 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 4 import org.springframework.context.annotation.Configuration;
 5 import org.springframework.http.converter.HttpMessageConverter;
 6 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 7 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 8 
 9 import java.util.List;
10 
11 @Configuration
12 public class MvcConfig implements WebMvcConfigurer {
13     @Override
14     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
15         MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
16 
17         ObjectMapper objectMapper = new ObjectMapper();
18         /**
19          * 序列换成json时,将所有的long变成string
20          * 因为js中得数字类型不能包含所有的java long值
21          */
22         SimpleModule simpleModule = new SimpleModule();
23         simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
24         simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
25         objectMapper.registerModule(simpleModule);
26 
27         jackson2HttpMessageConverter.setObjectMapper(objectMapper);
28         converters.add(0,jackson2HttpMessageConverter);
29     }
30 }

 

 总结:以上两种方法,根据需要选择,个人推荐只允许前端调用的接口使用第二种方式,有后台远程调用的使用第一种方式。

关于springmvc 返回long类型数据前台丢失精度的问题

原文:https://www.cnblogs.com/bloch/p/13578652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!