目录

1、 引入JacksonObjectMapper

2、 在WebMvcConfig中重写方法extendMessageConverters


由于在SpringMVC中, 将Controller方法返回值转换为json对象, 是通过jackson来实现的, 涉及到SpringMVC中的一个消息转换器MappingJackson2HttpMessageConverter, 所以我们要解决JSON long 型 数字过长精度丢失这个问题, 就需要对该消息转换器的功能进行拓展。

具体实现步骤:

  • 提供对象转换器JacksonObjectMapper,基于Jackson进行Java对象到json数据的转换(资料中已经提供,直接复制到项目中使用)
  • 在WebMvcConfig配置类中扩展Spring mvc的消息转换器,在此消息转换器中使用提供的对象转换器进行Java对象到json数据的转换

1、 引入JacksonObjectMapper

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;/*** 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象* 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]* 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]*/
public class JacksonObjectMapper extends ObjectMapper {public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";public JacksonObjectMapper() {super();//收到未知属性时不报异常this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);//反序列化时,属性不存在的兼容处理this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);SimpleModule simpleModule = new SimpleModule().addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))).addSerializer(BigInteger.class, ToStringSerializer.instance)// 序列化器 这行的作用是 将long 型转换成String 字符串.addSerializer(Long.class, ToStringSerializer.instance).addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));//注册功能模块 例如,可以添加自定义序列化器和反序列化器this.registerModule(simpleModule);}
}

2、 在WebMvcConfig中重写方法extendMessageConverters

package com.jie.reggjie.config;import com.jie.reggjie.common.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import java.util.List;@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {/*** 扩展mvc框架的消息转换器* @param converters*/@Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器...");//创建消息转换器对象MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();//设置对象转换器,底层使用Jackson将Java对象转为jsonmessageConverter.setObjectMapper(new JacksonObjectMapper());//将上面的消息转换器对象追加到mvc框架的转换器集合中 将我们自己converters.add(0,messageConverter);}
}

JSON long 型 数字过长精度丢失解决相关推荐

  1. js浮点数运算不精确 如何解决_解决 浏览器处理数字运算时精度丢失的方法

    浏览器处理数字运算时精度丢失的方法 为什么0.1 + 0.2 不等于0.3.因为计算机不能精确表示0.1, 0.2这样的浮点数,计算时使用的是带有舍入误差的数 并不是所有的浮点数在计算机内部都存在舍入 ...

  2. excel2019数字太长无法显示解决办法

    描述:excel2019数字太长无法显示解决办法 步骤: 选中数据 选择设置单元格 选择数值,小数位0即可

  3. Java中double类型精度丢失的问题_double类型数据加减操作精度丢失解决方法_BigDecimal取整

    BigDecimal在用double做入参的时候,二进制无法精确地表示十进制小数,编译器读到字符串"0.0000002"和"1.0000002"之后,必须把它转 ...

  4. 解决Vue 前端Long型超过16位精度丢失问题

    问题描述 后端利用雪花算法生成id前端接受时候精度会丢失, 这是idea控制台打印的id 这是在数据库里的id 很明显后面几位数做处理了,不过不用慌这个问题还是很简单的下面我来说下我的解决方案 解决方 ...

  5. Java接口long类型精度丢失,解决前后端交互Long类型精度丢失问题

    雪花算法ID,对应的后端Long类型,前端number类型,它们的精度不一样,导致精度丢失 现象 雪花算法得到的ID较长,传到前端后,精度丢失 库中:23754851322302474 后端:2375 ...

  6. C++浮点数float转int精度丢失解决

    我在开发时,遇到这样一种场景: 1.需要传递浮点数, 将浮点数转成int或者uint类型传输.(固定条件不能改) 2.例如传递65.533, 那么把这个数乘以1000,变成65533,然后再传输. 遇 ...

  7. Excel粘贴长文本数字 精度丢失

    Excel粘贴长文本数字 科学技术法 精度丢失 !! excel 在往里面粘贴较长的数字时,会用科学技术法显示,而且精度丢失,在粘贴前,先将单元格格式设为文本格式(ctl+1),可以解决此问题!

  8. python精度丢失_JS大坑之19位数的Number型精度丢失问题详解_稚终_前端开发者

    More 本项目仅供爬取体验,每次访问都会实时爬取数据,所以数据返回速度会比较慢,实际操作应该是定时爬取数据然后将数据存进数据库,数据从数据库返回从而提高数据返回效率. 但项目很基础,可以作为以上各个 ...

  9. double java 精度丢失_java中double和float精度丢失问题及解决方法

    在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...

最新文章

  1. 分布式ID(唯一性)的生成方法汇总
  2. 10款人气暴涨的PHP开源工具
  3. Range在各浏览器下的问题和常见处理办法
  4. LruCache缓存bitmap(一)
  5. lucene6.0 查询语句设置关键字boost值
  6. linux环境下配置虚拟主机域名
  7. L1-040 最佳情侣身高差-PAT团体程序设计天梯赛GPLT
  8. python3第三方模块安装路径_查看python及其第三方库的版本和安装位置
  9. merge 与include
  10. 最长回文子串manacher算法模板
  11. how to get keyboard key with non blocking in terminal
  12. c语言语法分析常见问题,C语言语法提要与常见错误分析.doc
  13. Spring源码之FactoryBean接口的作用和实现原理
  14. spring boot 应用设置session path_springboot整合redis实现分布式session
  15. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
  16. java read dxf xdata_DXF格式文件数据提取
  17. 大学英语综合教程二 Unit 8 课文内容英译中 中英翻译
  18. IntelliJ IDEA 简体中文字体
  19. 钌碳Ru/NC7440-18-8制备碳化铁嵌入式碳复合材料
  20. VC++线程中不能用updatedata()的解决办法

热门文章

  1. 荣耀 6p android 5.0,荣耀6/6Plus更新EMUI 5.6.1开发版
  2. 那些看来很朴实,却很有趣,很有爱的签名
  3. LeetCode179:最大数
  4. python怎么换背景颜色_Python给照片换底色(基于opencv模块)
  5. 人工智能其实就是『八卦』
  6. 江苏省南通中学2021高考成绩查询,南通中学排名前十名,2021年南通中学排名一览表...
  7. js按钮确认删除提示
  8. 程序员式贪吃蛇,URL贪吃蛇和源码贪吃蛇你值得一玩
  9. 洛谷P1033自由落体题解--zhengjun
  10. 【偏振光1】什么是偏振光