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

  本篇文章为你整理了后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题()的详细内容,包含有 后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题,希望能帮助你了解 后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题。

  我们在实际开发中肯定会遇到后端的时间传到前端是这个样子的:2022-08-02T15:43:50
 

  这个时候前后端就开始踢皮球了,!!
 

  后端说:前端来做就可!
 

  前端说:后端来做就可!
 

  作为一名有责任感的后端,这种事情怎么能让前端来搞呢!
 

  还有就是Long类型的返回到前端可能会损失精度,这个情况只能后端来做了!

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

  二、错误示范

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

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

  三、导入依赖

  

 !--json模块-- 

 

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-json /artifactId

   /dependency

  

 

  四、编写配置类

  

@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());

  

 

  

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);

  

 

  五、测试成果

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

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

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

  有缘人才可以看得到的哦,欢迎关注小编公众号,文章首发抢先看,谢谢大家!!!

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

  以上就是后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题()的详细内容,想要了解更多 后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: