SpringBoot全局配置long转String丢失精度的问题解决

作者:jdk1.8api 时间:2023-02-19 22:58:49 

目录
  • 第一种方式

  • 第二种方式

  • 第三种方式

  • 第四种方式(缺点:将所有的数字类型都会转为字符串)

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://blog.csdn.net/qq_44757149/article/details/117158087

标签:SpringBoot,long,String
0
投稿

猜你喜欢

  • Android实现点击获取验证码倒计时效果

    2022-08-29 09:23:41
  • Android基于高德地图完全自定义Marker的实现方法

    2023-03-09 03:32:30
  • Android Studio轻松构建自定义模板的步骤记录

    2023-07-19 01:11:51
  • 给c#添加SetTimeout和SetInterval函数

    2021-07-02 00:58:08
  • Android仿微信语音聊天功能

    2022-11-24 03:36:12
  • C语言折半查找法的超详细讲解

    2022-10-26 19:33:16
  • Spring计划任务用法实例详解

    2021-08-03 11:41:08
  • SpringCloud微服务熔断器Hystrix使用详解

    2023-07-06 22:57:46
  • 深入了解java内存分配和回收策略

    2023-02-27 15:16:58
  • C#中32位浮点数Float(Real)一步步按位Bit进行分析

    2023-07-19 16:01:20
  • Spring实战之注入集合值操作示例

    2023-03-04 04:02:53
  • C#影院售票系统毕业设计(3)

    2023-04-24 04:08:57
  • Java详解表格的创建与使用流程

    2021-06-19 22:58:52
  • hadoop实现grep示例分享

    2023-12-24 05:31:04
  • 四步五分钟Spring4快速集成Swagger

    2022-02-18 08:24:15
  • 浅谈Java中注解Annotation的定义、使用、解析

    2021-07-29 04:07:52
  • SpringAOP事务配置语法及实现过程详解

    2023-12-27 21:26:16
  • android之计时器(Chronometer)的使用以及常用的方法

    2021-05-26 12:27:33
  • Flutter实现自定义搜索框AppBar的示例代码

    2021-10-26 02:37:54
  • Android获取经纬度计算距离介绍

    2022-04-30 20:00:04
  • asp之家 软件编程 m.aspxhome.com