SpringBoot全局配置long转String丢失精度问题解决方案
web项目中,前端JS使用Java后端传过来的Long/long会丢失精度。
后端将返回的数据改为String使用即可
第一种
自己建个配置类
extendsWebMvcConfigurerAdapter已经被弃用,直接实现WebMvcConfigurer该接口就行了
@EnableWebMvc @Configuration publicclassWebDataConvertConfigimplementsWebMvcConfigurer{ publicvoidconfigureMessageConverters(List>converters){ MappingJackson2HttpMessageConverterjackson2HttpMessageConverter=newMappingJackson2HttpMessageConverter(); ObjectMapperobjectMapper=newObjectMapper(); /** *序列换成json时,将所有的long变成string *因为js中得数字类型不能包含所有的javalong值 */ SimpleModulesimpleModule=newSimpleModule(); simpleModule.addSerializer(Long.class,ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE,ToStringSerializer.instance); objectMapper.registerModule(simpleModule); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); }
第二种
前提是使用Jackson2
@Configuration publicclassJacksonConfig{ /** *Jackson全局转化long类型为String,解决jackson序列化时long类型缺失精度问题 *@returnJackson2ObjectMapperBuilderCustomizer注入的对象 */ @Bean publicJackson2ObjectMapperBuilderCustomizerjackson2ObjectMapperBuilderCustomizer(){ Jackson2ObjectMapperBuilderCustomizercunstomizer=newJackson2ObjectMapperBuilderCustomizer(){ @Override publicvoidcustomize(Jackson2ObjectMapperBuilderjacksonObjectMapperBuilder){ jacksonObjectMapperBuilder.serializerByType(Long.TYPE,ToStringSerializer.instance); jacksonObjectMapperBuilder.serializerByType(Long.class,ToStringSerializer.instance); } }; returncunstomizer; }
自己项目使用的时候,第二种未能生效。可能是由于不是使用的jackson2??。使用第一种可以,遂采用了第一种
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。