• 后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题


    一、前言

    我们在实际开发中肯定会遇到后端的时间传到前端是这个样子的:2022-08-02T15:43:50
    这个时候前后端就开始踢皮球了,!!
    后端说:前端来做就可!
    前端说:后端来做就可!
    作为一名有责任感的后端,这种事情怎么能让前端来搞呢!
    还有就是Long类型的返回到前端可能会损失精度,这个情况只能后端来做了!

    解决方案还是看的开源框架,人家写的,咱就不造轮子了!直接开车!!

    二、错误示范

    带着T非常不好,产品要求不带,哈哈,一切按照原型来哦!!

    在这里插入图片描述

    下面的testNum的值是Long类型的最大值:9223372036854775807,这样就会损失精度成:9223372036854776000

    在这里插入图片描述

    三、导入依赖

    
    <dependency>
    	<groupId>org.springframework.bootgroupId>
    	<artifactId>spring-boot-starter-jsonartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    四、编写配置类

    @Configuration(proxyBeanMethods = false)
    @ConditionalOnClass(ObjectMapper.class)
    @AutoConfigureBefore(JacksonAutoConfiguration.class)
    public class JacksonConfiguration {
    
    	@Bean
    	@ConditionalOnMissingBean
    	public Jackson2ObjectMapperBuilderCustomizer customizer() {
    		return builder -> {
    			builder.locale(Locale.CHINA);
    			builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
    			// 设置日期格式
    			builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
    			// 解决long类型损失精度
    			builder.serializerByType(Long.class, ToStringSerializer.instance);
    			// 日期格式自定义类
    			builder.modules(new PigJavaTimeModule());
    		};
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    public class JavaTimeModule extends SimpleModule {
    
    	public JavaTimeModule() {
    		super(PackageVersion.VERSION);
    
    		// ======================= 时间序列化规则 ===============================
    		// yyyy-MM-dd HH:mm:ss
    		this.addSerializer(LocalDateTime.class,
    				new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
    		// yyyy-MM-dd
    		this.addSerializer(LocalDate.class,
    				new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
    		// HH:mm:ss
    		this.addSerializer(LocalTime.class,
    				new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
    
    		// Instant 类型序列化
    		this.addSerializer(Instant.class, InstantSerializer.INSTANCE);
    
    		// ======================= 时间反序列化规则 ==============================
    		// yyyy-MM-dd HH:mm:ss
    		this.addDeserializer(LocalDateTime.class,
    				new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
    		// yyyy-MM-dd
    		this.addDeserializer(LocalDate.class,
    				new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
    		// HH:mm:ss
    		this.addDeserializer(LocalTime.class,
    				new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
    		// Instant 反序列化
    		this.addDeserializer(Instant.class, InstantDeserializer.INSTANT);
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    五、测试成果

    我们发现日期的烦人的T被去掉了!再也不用踢皮球了哦!!

    在这里插入图片描述

    我们发现后端返回的类型为Long时,会自动变为String类型,再也不会损失精度了,这个很容易忽视!!

    在这里插入图片描述

    如果觉得有用,一键三连起来,小编谢谢大家了!!


    有缘人才可以看得到的哦!!!

    点击访问!小编自己的网站,里面也是有很多好的文章哦!

  • 相关阅读:
    IntelliJ IDEA个人可一直使用方法参考
    【无标题】
    计算机毕业设计微信小程序开发项目源代码ssm计算机毕业论文微信小程序毕业设计
    Leetcode刷题【hot100】最长连续序列
    【MySQL】InnoDB和MyISAM区别详解(MySQL专栏启动)
    PIE-engine 教程 ——云计算当中的list列表案例分析(for循环list)
    微信小程序入门->小程序简介,小程序商城项目案例,小程序入门案例及目录结构
    菲律宾公司注册
    【JVM基础篇】类加载器分类介绍
    30天刷题计划(三)
  • 原文地址:https://blog.csdn.net/qq_52423918/article/details/126125335