SpringBoot配置long转String 丢失精度的几种方式
在web项目中,Java后端传过来的Long/long类型,前端JS接收时会丢失精度。导致数据有问题。下面分享几种long转string的方式。
第一种:在相应的类的属性上添加JsonSerialize注解
@JsonSerialize(using = ToStringSerializer.class)
@TableId(value = "process_id")
@JsonSerialize(using = ToStringSerializer.class)
private Long processId;
第二种:配置全局转换,不需要在每个字段上添加注解,一劳永逸。推荐
@Configuration
@EnableWebMvc
public class WebDataConvertConfig implements WebMvcConfigurer {
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
//序列换成json时,将所有的long变成string
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() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder
.serializerByType(Long.class, ToStringSerializer.instance)
.serializerByType(Long.TYPE, ToStringSerializer.instance);
}
}
第四种:bootstrap.yml配置,会将所有数字类型都会转为字符串
spring:
jackson:
#将所有的number类型转为String返回
generator:
write_numbers_as_strings: true
#格式化返回时间 yyyy-MM-dd HH:mm:ss
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/lovebosom/article/details/142881675