SpringBoot全局配置long转String 丢失精度[通俗易懂]

SpringBoot全局配置long转String 丢失精度[通俗易懂]web项目中,Java后端传过来的Long/long类型,前端JS接收会丢失精度。 **本文推荐第三、第四种方式**第一种方式简单粗暴,将所有的Lang类型,改为String,数据库改成varchar类型;第二种方式自己建个配置类extendsWebMvcConfigurerAdapter已经被弃用,直接实现WebMvcConfigurer该接口就行了@EnableWebMvc@ConfigurationpublicclassWebDataConvertConfigimple

大家好,又见面了,我是你们的朋友全栈君。

web项目中,Java后端传过来的Long/long类型,前端JS接收会丢失精度。

本文推荐第三、第四种方式

第一种方式

简单粗暴,将所有的Lang类型,改为String,数据库改成varchar类型;

第二种方式

自己建个配置类
extends WebMvcConfigurerAdapter 已经被弃用,直接实现WebMvcConfigurer该接口就行了

@EnableWebMvc
@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);
        }

第三种方式

使用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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146391.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 欧拉函数求法

    欧拉函数求法欧拉函数是计算在1-n中n的质因数的个数;φ(x)=x*(p1-1)/p1*(p2-1)/p2*(p3-1)/p3…*(pn-1)/pn其中p1,p2,p3…是x的质因数;若x是质数:φ(x)=x-1若x是质数p的k次幂(即x=p^k):φ(x)=p^k-p^(k-1)=(p-1)p^(k-1)积性:φ(n*m)=φ(n)*φ(m)其中m、n互质。具体的证明和其他介绍就不多说了=.

    2022年8月22日
    5
  • STM32项目设计:基于STM32F4的电子阅读器制作教程[通俗易懂]

    STM32项目设计:基于STM32F4的电子阅读器制作教程[通俗易懂]基于STM32F4的电子阅读器一、项目功能要求项目说明:项目偏软件,但是要依赖于自己对硬件的熟悉和驱动才能完成用到的主要技术:SD卡驱动(难–不过可移植SD卡驱动细节可在用完再了解其驱动协议)FatFs文件系统移植使用LCD屏驱动(加载字库文件做字库在LCD上的显示)功能要求:开机Logo电子书列表扫描电子书列表显示及小说选择菜单阅读功能:字体选择字体大小选择字体颜色设置阅读背景设置书签设置能够记录每本电子书的退出时处于什么阅读位置下

    2022年9月27日
    0
  • go 对象json转map

    go 对象json转mapgo对象json转map//函 数:Obj2map//概 要://参 数://obj:传入Obj//返回值://mapObj:map对象//err:错误funcObj2map(objinterface{})(mapObjmap[string]interface{},errerror){ //结构体转js

    2022年5月16日
    38
  • Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-Play

    Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-PlayAndroid原生系统真的那么好用吗?这种问题当然是否定的。原生Android(指的是直接基于AOSP构建的而非手机厂商出厂固件修改的第三方ROM,但包括Nexus/Pixel或其它被Google直接支持的手机的可能是闭源的出厂固件)对于适合的人而言是无可替代的,当前几乎无任何定制ROM就与之相比。但是对于更多的中国用户而言,他们从一开始就使用的是定制系统,已经习惯了那一套逻辑和对系统的认知,所以定制系统是更好的选择(但您们最好祈祷一下手机厂商的ROM不要越来越不要脸)。当然.

    2022年6月19日
    81
  • struts2标签具体解释

    struts2标签具体解释

    2021年12月15日
    37
  • 固态硬盘故障表现及数据恢复方案表_ssd硬盘数据恢复得了吗

    固态硬盘故障表现及数据恢复方案表_ssd硬盘数据恢复得了吗固态硬盘出现硬件损坏时,通常是NAND控制芯片损坏造成的,主控芯片是固态硬盘的存取控制芯片,是固态硬盘的灵魂所在。相比于闪存颗粒有限的擦写寿命,在闪存颗粒依然坚挺的时候,主控芯片却损坏的概率反而要高得多,据统计,95%以上的固态硬盘故障,都是由于主控芯片发生故障引起的。主控芯片发生故障的表现有以下几种:(1)容量异常,容量识别成8Mb,16M,1G,2G等?(2)容量正常,但通过16进制编辑工具查看硬盘底层信息,只能显示几个在不断重复的扇区(3)可识别硬盘的型号,…

    2022年9月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号