SpringBoot全局配置long转String丢失精度问题解决方案

web项目中,前端JS使用Java后端传过来的Long/long会丢失精度。

后端将返回的数据改为String使用即可

第一种

自己建个配置类

extends WebMvcConfigurerAdapter 已经被弃用,直接实现WebMvcConfigurer该接口就行了

@EnableWebMvc

@Configuration

public class WebDataConvertConfig implements WebMvcConfigurer {

public void configureMessageConverters(List<HttpMessageConverter<?>> 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??。使用第一种可以,遂采用了第一种

以上是 SpringBoot全局配置long转String丢失精度问题解决方案 的全部内容, 来源链接: utcz.com/z/345994.html

回到顶部