这篇“SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题”文章吧。
解决Long型数据转换成json格式时丢失精度
最近项目中突然发现雪花算法生成的数据库主键id返回给前端时和本身的值不一致,于是后端进行断点调试发现没问题,于是问题聚焦于转换json格式,于是自定义Json 格式化,因为使用Springboot,全是自动化配置,所以要覆盖框架本身的转换方式,经翻阅官方文档,提下下列注解,自定json转换
代码如下:
@JsonComponentpublic class JsonSerializerManage { @Bean public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); //忽略value为null 时 key的输出 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); SimpleModule module = new SimpleModule(); module.addSerializer(Long.class, ToStringSerializer.instance); module.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(module); return objectMapper; }}
SpringBoot时间格式,Long型精度丢失常见问题
时间格式,Long型精度丢失
方法一: 在配置文件application.yml中增加如下代码即可。
注意:WebMvcConfig配置类或启动类中不要加@EnableMVC注解,加了会导致jackson配置失效
spring: jackson: ## 日期格式(可根据自己的需求修改格式) date-format: yyyy-MM-dd HH:mm:ss generator: ## 将数值类型转换为字符串,解决long型精度丢失 write_numbers_as_strings: true
@SuppressWarnings("deprecation")@Configurationpublic class AppWebMvcConfig extends WebMvcConfigurerAdapter{ //省略代码片段}
方法二:新建WebMvcCofig配置文件,重写数据转换方法。
注意:@EnableMVC注解不可缺失,缺失会导致Long型精度丢失
@SuppressWarnings("deprecation")@Configuration@EnableWebMvcpublic class AppWebMvcConfig extends WebMvcConfigurerAdapter{@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters){FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig = new FastJsonConfig();SerializeConfig serializeConfig = SerializeConfig.getGlobalInstance();//支持的数据类型List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();supportedMediaTypes.add(MediaType.APPLICATION_JSON);supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);supportedMediaTypes.add(MediaType.APPLICATION_PDF);supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);supportedMediaTypes.add(MediaType.APPLICATION_XML);supportedMediaTypes.add(MediaType.IMAGE_GIF);supportedMediaTypes.add(MediaType.IMAGE_JPEG);supportedMediaTypes.add(MediaType.IMAGE_PNG);supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);supportedMediaTypes.add(MediaType.TEXT_HTML);supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);supportedMediaTypes.add(MediaType.TEXT_PLAIN);supportedMediaTypes.add(MediaType.TEXT_XML);fastConverter.setSupportedMediaTypes(supportedMediaTypes);serializeConfig.put(Long.class, ToStringSerializer.instance);//Long转StringserializeConfig.put(Long.TYPE, ToStringSerializer.instance);//Long转StringfastJsonConfig.setSerializeConfig(serializeConfig);fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");//日期格式fastConverter.setFastJsonConfig(fastJsonConfig);converters.add(fastConverter);}
以上就是关于“SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。