項目中不少時候都會用到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