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

打印 上一主题 下一主题

主题 901|帖子 901|积分 2703

一、前言

我们在实际开发中肯定会遇到后端的时间传到前端是这个样子的:2022-08-02T15:43:50
这个时候前后端就开始踢皮球了,!!
后端说:前端来做就可!
前端说:后端来做就可!
作为一名有责任感的后端,这种事情怎么能让前端来搞呢!
还有就是Long类型的返回到前端可能会损失精度,这个情况只能后端来做了!
解决方案还是看的开源框架,人家写的,咱就不造轮子了!直接开车!!
二、错误示范

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

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

三、导入依赖
  1. <dependency>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-json</artifactId>
  4. </dependency>
复制代码
四、编写配置类
  1. @Configuration(proxyBeanMethods = false)
  2. @ConditionalOnClass(ObjectMapper.class)
  3. @AutoConfigureBefore(JacksonAutoConfiguration.class)
  4. public class JacksonConfiguration {
  5.         @Bean
  6.         @ConditionalOnMissingBean
  7.         public Jackson2ObjectMapperBuilderCustomizer customizer() {
  8.                 return builder -> {
  9.                         builder.locale(Locale.CHINA);
  10.                         builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
  11.                         // 设置日期格式
  12.                         builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
  13.                         // 解决long类型损失精度
  14.                         builder.serializerByType(Long.class, ToStringSerializer.instance);
  15.                         // 日期格式自定义类
  16.                         builder.modules(new PigJavaTimeModule());
  17.                 };
  18.         }
  19. }
复制代码
  1. public class JavaTimeModule extends SimpleModule {
  2.         public JavaTimeModule() {
  3.                 super(PackageVersion.VERSION);
  4.                 // ======================= 时间序列化规则 ===============================
  5.                 // yyyy-MM-dd HH:mm:ss
  6.                 this.addSerializer(LocalDateTime.class,
  7.                                 new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
  8.                 // yyyy-MM-dd
  9.                 this.addSerializer(LocalDate.class,
  10.                                 new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
  11.                 // HH:mm:ss
  12.                 this.addSerializer(LocalTime.class,
  13.                                 new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
  14.                 // Instant 类型序列化
  15.                 this.addSerializer(Instant.class, InstantSerializer.INSTANCE);
  16.                 // ======================= 时间反序列化规则 ==============================
  17.                 // yyyy-MM-dd HH:mm:ss
  18.                 this.addDeserializer(LocalDateTime.class,
  19.                                 new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
  20.                 // yyyy-MM-dd
  21.                 this.addDeserializer(LocalDate.class,
  22.                                 new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
  23.                 // HH:mm:ss
  24.                 this.addDeserializer(LocalTime.class,
  25.                                 new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
  26.                 // Instant 反序列化
  27.                 this.addDeserializer(Instant.class, InstantDeserializer.INSTANT);
  28.         }
  29. }
复制代码
五、测试成果

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

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

如果觉得有用,一键三连起来,小编谢谢大家了!!
有缘人才可以看得到的哦!!!点击访问!小编自己的网站,里面也是有很多好的文章哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表