SpringBoot使用Jackson配置全局時間日期格式
1. 前言
不知道小伙伴對于日期字段,在項目中都是如何處理的,是單獨(dú)給每個字段都自定義日期格式還是做全局格式設(shè)置?這個我之前啊,是對日期都是有做單獨(dú)配置,給每個Entity帶有日期字段的都配@JsonFormat注解,具體配置如下:
//把屬性的格式序列化時轉(zhuǎn)換成指定的格式. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
這不就代碼冗余了嘛;既然每個都要設(shè)置一遍,那何不如想一個能一勞永逸的方法,將全局的日期格式都統(tǒng)一化,自己也用不著挨個挨個去配置了,你們覺得呢?
2. 環(huán)境說明
環(huán)境說明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
3. 默認(rèn)時間格式展示演示
接下來,我先為大家演示一下,寫個接口查詢log日志列表來演示一下默認(rèn)的Date類型的字段內(nèi)容輸出是何種樣子?我們一起拭目以待。
3.1 定義實(shí)體
先定義一個日志實(shí)體,演示代碼如下:
/** * 系統(tǒng)日志實(shí)體 * */ @Data @TableName("log_info") @ApiModel(value = "系統(tǒng)日志實(shí)體", description = "系統(tǒng)日志實(shí)體") public class LogInfo { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主鍵id自增列") @TableId(value = "id", type = IdType.AUTO) private int id; @ApiModelProperty(value = "操作類型") @TableField(value = "log_type") private String logType; @ApiModelProperty(value = "接口返回狀態(tài)碼") @TableField(value = "response_code") private int responseCode; @ApiModelProperty(value = "請求時間") @TableField(value = "operate_time") private Date operateTime; @ApiModelProperty(value = "消耗時間") @TableField(value = "spend_time") private Long spendTime; @ApiModelProperty(value = "url") @TableField(value = "url") private String url; @ApiModelProperty(value = "請求體") @TableField(value = "body") private String body; @ApiModelProperty(value = "ip") @TableField(value = "ip") private String ip; @ApiModelProperty(value = "查詢參數(shù)") @TableField(value = "query") private String query; @ApiModelProperty(value = "異常信息") @TableField(value = "exception") private String exception; }
3.2 定義Controller
定義一個接口,請求路徑為:"/get-logs"。
/** * 不分頁查詢所有日志 */ @GetMapping("/get-logs") @ApiOperation(value = "不分頁查詢所有日志", notes = "不分頁查詢所有日志") public ResultResponse<List> getLogList() { return new ResultResponse<>(logInfoService.list()); }
接著,我們通過swagger直接請求一下,可以發(fā)現(xiàn)operateTime字段本是Date類型,所以不難看出,當(dāng)你未處理該字段時,默認(rèn)展示是Date字符串時間格式,即UTC格式。很不習(xí)慣也不方便頁面展示,所以,我們必須對該日期格式進(jìn)行處理,轉(zhuǎn)成比如“yyyy-MM-dd”或者“yyyy-MM-dd HH:mm:ss”等常規(guī)時間格式,這樣看著肯定舒服多了,也是頁面能接受的日期展示格式。
所以接下來,我就帶著大家如何來配置這個全局日期時間格式問題。
4. 配置 Jackson
在上方提到,如何一勞永逸,這不,我教你們,用到了Jackson,一個java的開源框架,一個超級好用的JSON解析類庫,包括上方提到的“@JsonFormat”,也是來自于它,至于Jackson的詳細(xì)用法,我將在下期重點(diǎn)介紹,此文主要帶大家如何配置全局日期格式。
4.1 jackson依賴引入
<!--jackson依賴--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.1</version> </dependency>
解釋一下:jackson-databind 依賴 jackson-core 和 jackson-annotations這兩,當(dāng)添加 jackson-databind 依賴之后, jackson-core 和 jackson-annotations 也會一并被引入;在添加相關(guān)依賴包之后,你就能使用 Jackson了。
注意:如果你是springboot項目,有引入spring-boot-starter-web這個starter,自然就引入了jackson包,所以大家不要重復(fù)導(dǎo)包啦,特此提醒??!
然后,再給大家解讀下,Jackson依賴被添加后,刷新maven,可以看到j(luò)ackson-core 和 jackson-annotations這兩都被引入進(jìn)來了。具體請看如下截圖:
4.2 Jackson配置
對于ObjectMapper類作為Jackson類的主類,我們要實(shí)現(xiàn)的日期格式設(shè)置也是基于它來實(shí)現(xiàn)的,大家請看,我們要用到這個方法setDateFormat()。
配置JacksonConfig類,代碼實(shí)現(xiàn)如下:
package com.example.demo.config; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.text.SimpleDateFormat; @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); // 自定義日期轉(zhuǎn)換格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return objectMapper; } }
4.3 測試
我們直接在JacksonConfig類中將日期格式轉(zhuǎn)成[yyyy-MM-dd HH:mm:ss],接下來,我們重啟下項目,使配置類生效,我們再次請求該接口,接口返回內(nèi)容如下:
可以看到,日期格式將順利寫成了我們所指定的日期格式,或許有的小伙伴可能不太篤定,湊巧嘛,可以,那我們另設(shè)置一個日期格式,具體如下修改:
//自定義時間格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
之后我們再重啟項目重新請求接口,大家請看。日期格式也是按指定格式輸出。
毫無疑問,如此設(shè)置,確實(shí)是可以針對全局是Date類型的字段進(jìn)行統(tǒng)一日期格式轉(zhuǎn)化,使用起來非常的方便,Jackson真的超級好用,推薦給大家。
到此這篇關(guān)于SpringBoot使用Jackson配置全局時間日期格式的文章就介紹到這了,更多相關(guān)SpringBoot 全局時間日期格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java堆內(nèi)存的10個要點(diǎn)的總結(jié)分析
本篇文章是對Java堆內(nèi)存的10個要點(diǎn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析
這篇文章主要介紹了SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析, 加了@ControllerAdvice的類為那些聲明了@ExceptionHandler、@InitBinder或@ModelAttribute注解修飾的 方法的類而提供的專業(yè)化的@Component,以供多個 Controller類所共享,需要的朋友可以參考下2024-01-01使用Springboot根據(jù)配置文件動態(tài)注入接口實(shí)現(xiàn)類
這篇文章主要介紹了使用Springboot根據(jù)配置文件動態(tài)注入接口實(shí)現(xiàn)類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08IDEA無法打開Marketplace的三種解決方案(推薦)
這篇文章主要介紹了IDEA無法打開Marketplace的三種解決方案(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Java基礎(chǔ)教程之類數(shù)據(jù)與類方法
這篇文章主要介紹了Java基礎(chǔ)教程之類數(shù)據(jù)與類方法,本文是對類的深入探討,類數(shù)據(jù)指類的一些屬性、參數(shù)等,類方法就是類包含的功能方法,需要的朋友可以參考下2014-08-08SpringBoot 對象存儲 MinIO的詳細(xì)過程
MinIO 是一個基于 Go 實(shí)現(xiàn)的高性能、兼容 S3 協(xié)議的對象存儲,它適合存儲海量的非結(jié)構(gòu)化的數(shù)據(jù),這篇文章主要介紹了SpringBoot 對象存儲 MinIO,需要的朋友可以參考下2023-07-07