SpringBoot 自定义Date序列化格式测试记录
------------恢复内容开始------------
首先新建一个SpringBoot(版本号2.5.4)项目,写一个TestController,一个实体类Response。
启动程序,使用Api Generator Plus 自动生成请求Uri: http://172.16.3.16:8080/spring.mvc.format.date
使用Postman发起请求,结果如下:
可以看到默认的时间格式使用的是ISO-8601格式为:yyyy-MM-dd'T'HH:mm:ss.SSSX
Spring Boot序列化实体Date时,
默认使用的 DateFormat 为 com.fasterxml.jackson.databind.util.StdDateFormat
使用的默认格式是 com.fasterxml.jackson.databind.util.StdDateFormat#DATE_FORMAT_STR_ISO8601
问题来了,我是怎么知道的呢?
现在我们来自定义Date的返回格式:
1. 通过 Application Properties 中的 spring.mvc.format.date
输入的时候有两个提示:
先来第一个:
重启Spring Boot,Postman发起请求,结果如下:
(꒪ꇴ꒪(꒪ꇴ꒪ ;)哈?
没变化??? 怎么会没变化呢??
文档注释写的很明白也很简单,啥都看不出来
Ctrl+单击 跟踪一下是哪里在使用它,
哎!就两个地方用了,一个还是外部类用的,那不就简单了,选第一个!
可以看到传给了DateTimeFormatters 类,有点眼熟啊!这不是java 8新加入的时间库的格式画类吗?点进去一看,
嘿!可不就是这位老铁嘛!!!
原因不就找着了吗?这哥们是格式化LocalDate、LocalTime、LocalDateTime的啊,格式化Date不归他管啊!
那怎么办?得在Response中加一个类型为LocalDate、LocalTime、LocalDateTime字段, 再重新测一次啊!
啊个屁!!!
跑偏了,我们最开始的目的是自定义Date的格式啊!!!
也就是说 spring.mvc.format.date 不能用在这里,那和他在一起的两位老兄也out了
突然注意到Ide给的提示:
这尼玛好像一开始就给了我答案了,可惜我没有珍惜!!!
下面我们来看第二种
2.
在Application Properties中又找着一个配置:
但是SpringBoot 默认使用不是Gson,使用的是Jackson啊!接着往下翻:
嗯,就它了,spring.jackson.date-format
来看提示,有三个DateFormat实现类可选,前面说SpringBoot默认使用的DateFormat是StdDateFormat,默认格式是ISO-8601;
咦,不对啊,怎么有一个ISO8601DateFormat,这俩有啥区别呢?
先试第一个StdDateFormat
nice,没变化,说明默认使用的是StdDateFormat的吗?有点虚,不敢确定啊!再试试ISO8061DateFormat:
嘿,还真是默认使用StdDateFormat,nice,没翻车,接着开。。。
前面也说了,默认DateFormat是StdDateFormat,默认ISO-8061格式是 yyyy-MM-dd'T'HH:mm:ss.SSSX
那ISO-8061DateFormat的格式为什么又是这样的呢?yyyy-MM-dd'T'HH:mm:ssZ
来看下源码,方法就这几个,既然是格式化,那就是你了老铁😍😍😍😍
可以看到,格式化用的是一个工具类ISO8601Utils,没说的,进去
哎哟喂!卧槽!看到注释了吗?
Format a date into 'yyyy-MM-ddThh:mm:ssZ' (default timezone, no milliseconds precision)
什么意思?翻译过来就是:将日期格式化为'yyyy-MM-ddThh:mm:ssZ'
就是这么牛逼!!!我就要格式化成这样,你能把我怎么着?来干我啊!🤨🤨
我是不是有病,他想格式化成啥样就格式化成啥样嘛!管他呢!我知道就行了,找什么为什么!找什么为什么!找什么为什么!
不过也看到了一些东西:
删除线什么意思?这他妈是被被抛弃了啊!!!再看下类注释
沃日!!!!
使用StdDateFormat代替了,也就是新版和旧版的区别。
再试试SimpleDateFormat
这个就很熟悉了啊,这不就是平常格式化Date用的吗?结果是什么不用看也知道了吧。
知道个锤子!!! 老子用它的时候都是自定义格式,谁他妈知道默认格式是啥。上Postman跑一下:
现在知道了吧,默认格式是这样子的: yy-M-d ah:mm
自定义格式:
文档说了,还能自定义
来搞一哈,
nice!
------------恢复内容结束------------