你还在用@DateTimeFormat?有没有更好的方法?

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 你还在用@DateTimeFormat?有没有更好的方法?

正文


平时的工作中,后端接口一定会有日期的类型,我们是怎么处理的呢?以前的处理方式:

  1. 使用@DateTimeFormat(pattern = "yyyy-MM-dd")
  2. 直接使用用字符串接受,具体的处理在我们的代码中完成日期的转换。

虽然上面的可以解决我们的问题,但是编码比较乱,后期维护难度比较大,这是我们怎么做才可以实现日期的转换呢?下面介绍一下好的方法


环境介绍:

本测试用例采用的是Spring-Boot项目,版本为1.5.9 ,当然 Spring-MVC也是一样的。

首先,我们不在请求接口的地方设置请求日期的类型:

30.png

请求测试:

28.png

根据我们的返回,可以知道,是没有String到Date的转换的组建。

我们找到了问题的原因,我们根据源码寻找是什么类才可以转换。

在我们的org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser这个类中可以看到:

27.png

实际上是给我们的Spring容器定义了一个

FormattingConversionServiceFactoryBean

这个对象,也就是

FormattingConversionService

这个类的组建对象,根据源码,问题就很好解决了,我们可以自定义一个转换器:

26.png

用作与字符串到日期的转换,之后,我们根据bean的生命周期,可以定一个后置处理器修改改组建的一些属性:

25.png

理论上,我们的日期可以正确的解析了,测试一下:

24.png

成功的返回,说明我们的配置成功啦!!

这么做有什么好处呢?好处都在解析的位置:

22.png

看上面,我们可以定义不同的解析日期的pattern来解析我们请求的参数,实现简单方便的请求以及方便维护的结果!

相关文章
|
7月前
|
存储 开发框架 .NET
解锁SqlSugar新境界:利用Serialize.Linq实现Lambda表达式灵活序列化与反序列化,赋能动态数据查询新高度!
【8月更文挑战第3天】随着软件开发复杂度提升,数据查询的灵活性变得至关重要。SqlSugar作为一款轻量级、高性能的.NET ORM框架,简化了数据库操作。但在需要跨服务共享查询逻辑时,直接传递Lambda表达式不可行。这时,Serialize.Linq库大显身手,能将Linq表达式序列化为字符串,实现在不同服务间传输查询逻辑。结合使用SqlSugar和Serialize.Linq,不仅能够保持代码清晰,还能实现复杂的动态查询逻辑,极大地增强了应用程序的灵活性和可扩展性。
219 2
|
4月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
64 5
常用工具类---日期时间工具
诸多时间的获取及计算,以及一些时间类型的转换!!!都是非常实用的哦~~~
|
9月前
|
移动开发 JavaScript 前端开发
技术经验分享:JavaScript实现Date()——日期格式化的三种常用方法
技术经验分享:JavaScript实现Date()——日期格式化的三种常用方法
47 0
|
9月前
|
Java
java中强大的时间处理工具:Calendar类(日历类)
`Calendar`类是Java中用来处理日期和时间的类,提供了许多属性来获取日期和时间的不同部分,如年、月、日、小时等。`Calendar`的常用属性包括`YEAR`(年)、`MONTH`(月)、`DATE`/`DAY_OF_MONTH`(日)、`DAY_OF_YEAR`(一年中的第几天)、`DAY_OF_WEEK_IN_MONTH`(一月中第几个星期)、`DAY_OF_WEEK`/`WEEK_OF_MONTH`(星期)等。
133 0
|
10月前
|
Java
一行注解,省却百行代码:深度解析@RequiredArgsConstructor的妙用
一行注解,省却百行代码:深度解析@RequiredArgsConstructor的妙用
555 0
|
存储 SQL 安全
【JavaSE专栏41】Java常用类 Date 解析,高效处理日期问题
【JavaSE专栏41】Java常用类 Date 解析,高效处理日期问题
294 0
|
缓存 安全 Java
java老鸟教你如何高效优雅的进行时间格式化
java老鸟教你如何高效优雅的进行时间格式化
593 0
|
Java
Java难点 | Calendar日历类
本文主要介绍了Calendar日历类相关的方法,通过代码实战,带你理解Calendar日历类。
133 0
Java难点 | Calendar日历类
|
设计模式
从零开始学设计模式(五):建造者模式(Builder Pattern)
在现实世界中的很多东西都是由很多组成部分构成的,比如房子它由砖头、水泥、石灰、钢筋等组成,即一个个简单的组成部分构成了一个复杂的房子。同样在软件系统中也存在很多复杂对象,而复杂对象的一些属性就相当于盖房子的材料,创建对象的过程就相当于盖房子的过程。由于组合部件的过程很复杂,因此,这些部件的组合过程往往被“外部化”到一个称作建造者的对象里,然后建造者返还一个已经建造完毕的完整产品对象,而用户无须关心该对象所包含的属性以及它们的组装方式,这就是建造者模式的模式动机。
205 0
从零开始学设计模式(五):建造者模式(Builder Pattern)

热门文章

最新文章