项目中不少时候都会用到json,经常使用的有fastjson,Jackson等等这些,有时候为了统一,咱们一般就会约定使用某一种。
无论使用哪一种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢失精度,从而形成数据的不许确,解决方式呢,就是在序列化时,会将Long类型的数据转化为String类型
在使用Spring MVC默认的Jackson时,咱们能够这么作:json
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(simpleModule); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); } }
固然,有时候项目中也可能会统一约定使用了fastjson,然而Spring MVC中默认是使用了Jackson的
在Spring Boot中将Jackson替换为fastjson通常会有两种方式:app
第一种:ide
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public HttpMessageConverters fastJsonHttpMessageConverter() { return new HttpMessageConverters(new FastJsonHttpMessageConverter()); } }
第二种:code
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter); } }
替换成fastjson以后,对于精度丢失问题,咱们能够这么去作:orm
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); SerializeConfig serializeConfig = SerializeConfig.globalInstance; serializeConfig.put(BigInteger.class, ToStringSerializer.instance); serializeConfig.put(Long.class, ToStringSerializer.instance); serializeConfig.put(Long.TYPE, ToStringSerializer.instance); fastJsonConfig.setSerializeConfig(serializeConfig); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter); } }
我想对于另外一种方式,怎么去作你们也该明白的吧,这里就很少说了。
须要注意的是,这里使用的fastjson的版本为1.2.31,版本不一样,方式略有不一样。io