之前在SpringBoot2.0.0的时候,我就遇到了这个问题,然后网上说有三种解决方案,如下:
方法一
在实体类的Long字段上加上注解即可
@JsonSerialize(using=ToStringSerializer.class)
private Long id;//主键ID,雪花算法生成
指定了ToStringSerializer进行序列化,将数字编码成字符串格式。这种方式的优点是颗粒度可以很精细;缺点同样是太精细,如果需要调整的字段比较多会比较麻烦。
方法二
Jackson有个配置参数WRITE_NUMBERS_AS_STRINGS,可以强制将所有数字全部转成字符串输出。其功能介绍为:Feature that forces all Java numbers to be written as JSON strings.。使用方法很简单,只需要配置参数即可:
spring:
jackson:
generator:
write_numbers_as_strings: true
这种方式的优点是使用方便,不需要调整代码;缺点是颗粒度太大,所有的数字都被转成字符串输出了,如果有些必须是Long的就会有问题,比如我的上传图片markdown编辑器,必须返回Long的标志,所以这种方法不行。
方案三
@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);
}
}
嗯在SpringBoot2.0.0的时候,我用的是方案二,没问题,但是因为升级SpringBoot导致这种方式也不知道为什么就是不行,所以最后我用了方案1.