關于在Springboot中設置時間格式問題

目錄

  • 1-設置全局時間格式
      • 1.Date類型的時間
      • 2.JDK8時間
      • 3.使Date類和JDK8時間類統統格式化時間
  • 2-關于@DateTimeFormat注解

1-設置全局時間格式

1.Date類型的時間

對于老項目來說,springboot中許多類使用的是Date類型的時間,沒有用到LocalDateTime等JDK8時間類,那么直接在配置文件中設置json序列化時間格式即可

  # 配置文件中配置jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8

2.JDK8時間

如果項目中的時間采用的是LocalDateTime、LocalDate、LocalTime等JDK8時間類,Jackson默認情況下不支持這些時間類的序列化,那么我們需要顯式的配置它。

// 方案1
@Configuration
public class JacksonConfig {@Beanpublic Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();// 注冊 JavaTimeModule 以支持 JDK 8 時間類JavaTimeModule javaTimeModule = new JavaTimeModule();// 配置日期時間格式DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 自定義 LocalDateTime 序列化器和反序列化器javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));// 自定義 LocalDate 序列化器和反序列化器(如果需要)javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));// 自定義 LocalTime 序列化器和反序列化器(如果需要)javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));builder.modules(javaTimeModule);// 其他全局配置builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 禁用時間戳格式return builder;}
}
// 方案2
@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();// 注冊 JavaTimeModule 以支持 JDK 8 時間類JavaTimeModule javaTimeModule = new JavaTimeModule();// 配置日期時間格式DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 自定義 LocalDateTime 序列化器和反序列化器javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));// 自定義 LocalDate 序列化器和反序列化器(如果需要)javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));// 自定義 LocalTime 序列化器和反序列化器(如果需要)javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));objectMapper.registerModule(javaTimeModule);// 其他全局配置objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 禁用時間戳格式return objectMapper;}
}

注意!!!當你顯式通過配置類進行配置的時候,配置文件中對于Date類型的格式配置以及時區通通失效了,這是因為自定義的配置會覆蓋Springboot的自動配置,當檢測到你自定義配置時,自動配置不會再生效

3.使Date類和JDK8時間類統統格式化時間

如果你的項目比較亂,這些類混合在用,那么你需要在顯式配置的時候捎帶上Date類如何序列化的規則,如下

@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();// 設置全局日期格式(影響 java.util.Date)objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 注冊 JavaTimeModule 以支持 JDK 8 時間類JavaTimeModule javaTimeModule = new JavaTimeModule();// 配置日期時間格式DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 自定義 LocalDateTime 序列化器和反序列化器javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));// 自定義 LocalDate 序列化器和反序列化器javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));// 自定義 LocalTime 序列化器和反序列化器javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));objectMapper.registerModule(javaTimeModule);// 禁用時間戳格式(影響 java.util.Date 和 JDK 8 時間類)objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);return objectMapper;}
}

以上這些配置根據項目情況選擇合適的序列化/反序列化方案,這些方案適用于json的入參/出參的序列化規則,也就是說,當你的入參是json格式時,對應的時間只要適用于你規定的格式,那么jackson將會自動處理
當你想自定義某個類中的時間屬性以特定格式返回的時候,你可以使用@JsonFormat注解,該注解優先級大于項目全局時間格式

2-關于@DateTimeFormat注解

@DateTimeFormat 注解主要用于入參時格式化日期參數,尤其是在處理表單提交或 URL 請求參數時。它不會影響出參(即返回給客戶端的 JSON 或其他格式響應)的日期格式,該注解對Date類和JDK8時間類都生效

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78046.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試篇:Java并發與多線程

基礎概念 什么是線程?線程和進程的區別是什么? 線程 是程序執行的最小單位,它是 CPU 調度和執行的基本單元。一個進程可以包含多個線程,這些線程共享進程的資源(如內存),但每個線程有自己的棧…

【Qt/C++】QPrinter關于QInternal::Printer的解析

1. 問題分析 QInternal::Printer在Qt框架中并不是一個直接暴露給用戶的API。相反,它是一個枚舉值,用于標識QPaintDevice的類型。在Qt中,QPaintDevice是一個抽象類,用于任何可以進行繪制的設備,如窗口、圖像、打印機等…

uniapp返回上一頁接口數據更新了,頁面未更新

注意:不是組件套組件可以不使用setTimeout延時 返回上一頁一般會走onshow,但是接口更新了頁面未更新 onShow(() > {// 切換城市后重新調用數據if (areaId.value) {const timer setTimeout(async () > {timer && clearTimeout(timer);…

MCU開發學習記錄11 - ADC學習與實踐(HAL庫) - 單通道ADC采集、多通道ADC采集、定時器觸發連續ADC采集 - STM32CubeMX

名詞解釋: ADC: Analog-to-Digital SAR:Successive Approximation Register 本文將介紹ADC的概念、相關函數以及STM32CubeMX生成ADC的配置函數。針對于ADC實踐:單通道采集芯片內部溫度傳感器(ADC1_ch16)&a…

68元撬動未來:明遠智睿2351開發板重塑嵌入式開發生態

在嵌入式開發領域,價格與性能的矛盾始終存在:高端開發板功能強大但成本高昂,低價產品則往往受限于性能與擴展性。明遠智睿2351開發板以68元(含稅)的定價打破這一僵局,通過四核1.4G處理器、全功能Linux系統與…

關于ubuntu密碼正確但是無法登錄的情況

參考這個文章: https://blog.csdn.net/cuichongxin/article/details/117462494 檢查一下是不是用戶被lock了 輸入passwd -s username 如果用戶是L狀態,那么就是lock了。 使用 passwd -u username 解鎖 關于 .bashrc 不生效 有幾點: ~/.…

LeetCode-47. 全排列 II

1、題目描述: 給定一個可包含重復數字的序列 nums ,按任意順序 返回所有不重復的全排列。 示例 1: 輸入:nums [1,1,2] 輸出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 輸入:nums [1,2,3] 輸出&am…

Python 設計模式:訪問者模式

1. 什么是訪問者模式? 訪問者模式是一種行為設計模式,它允許你在不改變對象結構的前提下,定義新的操作。通過將操作封裝在訪問者對象中,訪問者模式使得你可以在不修改元素類的情況下,向元素類添加新的功能。 訪問者模…

基于stm32的智能門鎖系統

標題:基于stm32的智能門鎖系統 內容:1.摘要 摘要:隨著科技的飛速發展,人們對家居安全的要求日益提高,智能門鎖系統應運而生。本研究的目的是設計并實現一個基于STM32的智能門鎖系統。采用STM32微控制器作為核心控制單元,結合指紋…

GitHub 常見高頻問題與解決方案(實用手冊)

目錄 1.Push 提示權限錯誤(Permission denied) 2.push 報錯:rejected non-fast-forward 3.忘記添加 .gitignore,上傳了無關文件 4. 撤銷最近一次 commit 5.clone 太慢或失敗 6.如何切換/創建分支 7.如何合并分支 8.如何刪除遠程分支 9.如何 Fork + PR(Pull Reque…

【MySQL數據庫入門到精通-04 DML操作】

一、DML DML英文全稱是Data Manipulation Language(數據操作語言),用來對數據庫中表的數據記錄進行增、刪、改操作。 二、添加數據 1.給指定字段添加數據 代碼如下(示例): insert into 表名 (字段1,字…

2022 年 9 月青少年軟編等考 C 語言六級真題解析

目錄 T1. 棧的基本操作T2. stack or queue思路分析T3. 合影效果T4. 發型糟糕的一天思路分析T1. 棧的基本操作 題目鏈接:SOJ D1188 此題為 2022 年 6 月三級第二題僅有棧操作的版本,見 2022 年 6 月青少年軟編等考 C 語言三級真題解析中的 T2。 T2. stack or queue 題目鏈…

美創市場競爭力突出!《2025中國數據安全市場研究報告》發布

數據要素時代,數據已成國家戰略性資源,數據安全關乎國家安全!數說安全發布的《2025中國數據安全市場研究報告》(以下簡稱《報告》)顯示,2024年數據安全市場逆勢增長,市場規模首次突破百億。《報…

VUE Element-ui Message 消息提示組件自定義封裝

為了讓message 信息提示的更加方便快捷,減少不同地方的調用,避免代碼的重復,特意再官方message 組件的基礎上二次封裝,使代碼更加的優雅和高效。 實現效果: 代碼組件: 封裝成 message.js 文件,…

高防IP能抵御哪些類型的網絡攻擊?

高防IP(High Defense IP)是一種專門針對網絡攻擊設計的防護服務,主要通過流量清洗、協議分析、行為檢測等技術抵御多種網絡攻擊。以下是其能防御的主要攻擊類型及原理: ??一、常見防御的攻擊類型?? ??DDoS攻擊(分…

小紅書文字配圖平替工具

小紅書的文字配圖只有手機版有,想找一個電腦版的,查了一下。以下是幾款類似小紅書風格的花字、藝術字生成工具,適合制作吸睛的社交媒體配圖,分為 手機APP 和 在線工具 兩類,供你選擇: 一、手機APP推薦 醒圖…

【浙江大學DeepSeek公開課】走向數字社會:從DeepSeek到群體智慧

從DeepSeek到群體智慧 一、人工智能發展脈絡二、DeepSeek大模型的意義與特點三、人工智能促進社會數字化轉型四、群體智慧與數字社會 一、人工智能發展脈絡 圖靈與圖靈機:1937年,圖靈發表論文《On computable numbers, with an application to the Ents…

解讀大型語言模型:從Transformer架構到模型量化技術

一、生成式人工智能概述 生成式人工智能(Generative Artificial Intelligence)是一種先進的技術,能夠生成多種類型的內容,包括文本、圖像、音頻以及合成數據等。其用戶界面的便捷性極大地推動了其廣泛應用,用戶僅需在…

JSON實現動態按鈕管理的Python應用

在開發桌面應用程序時,動態生成用戶界面元素并根據配置文件靈活管理是一項常見需求。本文將介紹如何使用Python的wxPython庫結合JSON配置文件,開發一個支持動態按鈕創建、文件執行和配置管理的桌面應用程序。該應用允許用戶通過設置界面配置按鈕名稱和關…

序章:寫在前面

目錄 為什么要學習 Python?那么,Python 到底是什么呢?Python 的用戶多嗎?Python 的語法究竟是怎樣的?C 語言JavaPython Python 好學嗎? 為什么要學習 Python? 這個問題或許會讓不少人感到不解。…