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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。