长整型Long返回到前端,js出现精度丢失怎么办-创新互联
前端后接口对接时,如果后台的id或者其他字段使用了长整型Long,就很容易出现js丢失精度问题。用接口工具调用时,往往id返回都是对的,但是一到页面上,js就后缀000。
前端说返回的值有问题,F12看看!后端说没问题,Postman看看!
这是js支持的问题,解决这个问题的办法很显然,返回字符串即可。
怎么实现呢,你可以直接将vo对象的id改成String类型,但是会带来copyProperties的不便,所以见过很多人通过增加虚拟字段实现。下面是一个整体解决方案:(需要略微了解下Spring的消息序列化原理,譬如MappingJackson2HttpMessageConverter是干嘛的)
MainConfig(通常是主config类,@Configuration注解的,用来导入一些基础配置)增加MessageConvert的重写extendMessageConverters:
@Override public void extendMessageConverters(List
> converters) { MappingJackson2HttpMessageConverter jacksonConverter = null; for (HttpMessageConverter> converter : converters) { if (converter instanceof MappingJackson2HttpMessageConverter) { jacksonConverter = (MappingJackson2HttpMessageConverter) converter; } } if (jacksonConverter != null) { jacksonConverter.setObjectMapper(new CustomObjectMapper()); converters.add(jacksonConverter); } } - CustomObjectMapper的实现:
public class CustomObjectMapper extends ObjectMapper { public CustomObjectMapper() { super(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); registerModule(simpleModule); } }
这样,接口返回的时候,所有的长整型字段,会被当做字符串处理,自动加上双引号。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:长整型Long返回到前端,js出现精度丢失怎么办-创新互联
分享路径:http://cdiso.cn/article/djicgs.html