龙空技术网

SpringBoot页面展示超长Long类型的值精度失效的解决办法

小林软件工作室 97

前言:

现在各位老铁们对“jslong时间”大概比较关怀,同学们都需要学习一些“jslong时间”的相关内容。那么小编也在网摘上网罗了一些关于“jslong时间””的相关资讯,希望我们能喜欢,小伙伴们一起来学习一下吧!

之前在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的标志,所以这种方法不行。

方案三

@Configurationpublic 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.

标签: #jslong时间