搜索
您的当前位置:首页正文

SpringBoot全局配置long转String丢失精度

来源:爱够旅游网
SpringBoot全局配置long转String丢失精度

web项⽬中,前端JS使⽤Java后端传过来的Long/long会丢失精度。后端将返回的数据改为String使⽤即可

第⼀种

⾃⼰建个配置类

extends WebMvcConfigurerAdapter 已经被弃⽤,直接实现WebMvcConfigurer 该接⼝就⾏了

@EnableWebMvc@Configuration

public class WebDataConvertConfig implements WebMvcConfigurer {

public void configureMessageConverters(List> converters) {

MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); /**

* 序列换成json时,将所有的long变成string

* 因为js中得数字类型不能包含所有的java long值 */

SimpleModule simpleModule = new SimpleModule();

simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(simpleModule);

jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); }

第⼆种

前提是使⽤Jackson2

@Configuration

public class JacksonConfig { /**

* Jackson全局转化long类型为String,解决jackson序列化时long类型缺失精度问题 * @return Jackson2ObjectMapperBuilderCustomizer 注⼊的对象 */

@Bean

public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {

@Override

public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {

jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance); jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance); } };

return cunstomizer; }

⾃⼰项⽬使⽤的时候,第⼆种未能⽣效。可能是由于不是使⽤的jackson2??。使⽤第⼀种可以,遂采⽤了第⼀种

因篇幅问题不能全部显示,请点此查看更多更全内容

Top