范文芳

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!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

posted @ 2021-09-18 19:47  布I衣  阅读(809)  评论(0编辑  收藏  举报