在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