之前在做springboot项目时遇到Long类型数据直接用@ResponseBody返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题。之后使用自定义消息转化器全部转为String解决。代码如下:
@EnableWebMvc //默认情况下Spring Boot 使用
WebMvcAutoConfiguration
中配置的各种属性,@EnableWebMvc使WebMvcAutoConfiguration
失效,Springmvc完全由自己控制
@Configuration //标明了JsonDataConvertConfig 类是一个配置类并且会将该类作为一个SpringBean添加到IOC容器内
public class JsonDataConvertConfig
extends WebMvcConfigurerAdapter{
@Override
//重写WebMvcConfigurerAdapter的configureMessageConverters抽象方法
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter =
new MappingJackson2HttpMessageConverter();
//
ObjectMapper 是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然
ObjectMapper objectMapper =
new ObjectMapper();
SimpleModule simpleModule =
new SimpleModule();
//序列化将Long转String类型
simpleModule.addSerializer(Long.
class, ToStringSerializer.
instance);
simpleModule.addSerializer(Long.
TYPE, ToStringSerializer.
instance);
SimpleModule bigIntegerModule =
new SimpleModule();
//序列化将BigInteger转String类型
bigIntegerModule.addSerializer(BigInteger.
class, ToStringSerializer.
instance);
SimpleModule bigDecimalModule =
new SimpleModule();
//序列化将BigDecimal转String类型
bigDecimalModule.addSerializer(BigDecimal.
class, ToStringSerializer.
instance);
objectMapper.registerModule(simpleModule);
objectMapper.registerModule(bigDecimalModule);
objectMapper.registerModule(bigIntegerModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
}
}
注:WebMvcConfigurerAdapter实现了WebMvcConfigurer的所有方法,都是空实现,需要什么个性化配置,需要自己继承并重写对应的配置方法,WebMvcConfigurerAdapter实现的方法跟springmvc.xml里的配置一样,具体方法见:https://blog.youkuaiyun.com/wujiaqi0921/article/details/78324722