欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

@JsonFormat?和?@DateTimeFormat?時(shí)間格式化注解(場(chǎng)景示例代碼)

 更新時(shí)間:2023年05月25日 16:18:59   作者:zhuzicc  
這篇文章主要介紹了@JsonFormat和@DateTimeFormat時(shí)間格式化注解,本文通過(guò)場(chǎng)景示例代碼詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前后數(shù)據(jù)交互過(guò)程中,Date類型的數(shù)據(jù)經(jīng)常會(huì)出現(xiàn)類型映射轉(zhuǎn)換的錯(cuò)誤,為了達(dá)到業(yè)務(wù)的目標(biāo)時(shí)間格式,通常會(huì)使用@JsonFormat 和 @DateTimeFormat,但是這兩者有什么區(qū)別呢?

本文的衍生篇已發(fā)布,感興趣的伙伴們可以瞅瞅哈,針對(duì) @DateTimeFormat 做了補(bǔ)充說(shuō)明,有場(chǎng)景示例比較詳情,需要的大佬可以看一下。傳送門 Spring @DateTimeFormat日期格式化時(shí)注解淺析分享

一、示例代碼

先準(zhǔn)備一個(gè)簡(jiǎn)單POJO,擁有Date類型的成員變量:

@Data
public class DateEntity {
    private Date date;
}

lombok依賴(版本任意):

 <dependency>
	  <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
 </dependency>

再準(zhǔn)備一個(gè)Controller,模擬一下前后交互:

@RestController
@RequestMapping("/date")
public class DateController {
    @RequestMapping("/test")
    public DateEntity getDate(DateEntity dateEntity){
        System.out.println("入?yún)⒌膁ate:"+dateEntity.getDate());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(dateEntity.getDate());
        System.out.println("SimpleDateFormat格式化后的date:"+date);
        DateEntity result = new DateEntity();
        result.setDate(new Date());
        return result;
     }
}

創(chuàng)建好POJO和Controller后,用Postman模擬一下請(qǐng)求發(fā)送:

結(jié)果報(bào)錯(cuò):

大概意思就是說(shuō)String類型轉(zhuǎn)換成Date類型失敗,所以報(bào)了IllegalArgumentException異常;

二、@JsonFormat注解

  • 提供者:jackson
  • 作用:可以約束時(shí)間的接收格式和響應(yīng)格式 (接收和響應(yīng)的都是JSON字符串),將日期類型數(shù)據(jù)在JSON格式和java.util.Date對(duì)象之間轉(zhuǎn)換。與傳輸方向沒(méi)有關(guān)系(前端到后端or后端到前端都可以使用),注意因?yàn)槲覀兪菛|八區(qū)(北京時(shí)間),使用時(shí)需要加上時(shí)區(qū)( timezone = “GMT+8”),不然所得值會(huì)比實(shí)際時(shí)間晚8小時(shí);
  • 常用注解屬性:
名稱作用
pattern約定時(shí)間格式:pattern=“yyyy-MM-dd HH:mm:ss”
timezone指定具體時(shí)區(qū): timezone = “GMT+8” or timezone = “Asia/Shanghai”
  • 經(jīng)過(guò)測(cè)試使用單獨(dú)使用@JsonFormat注解時(shí)需要先通過(guò)@RequestBody將入?yún)?shù)映射到實(shí)體后,@JsonFormat注解才能去對(duì)時(shí)間格式進(jìn)行約束;
  • 改造controller,加上了@RequestBody注解:
    @RequestMapping("/test")
    public DateEntity getDate(@RequestBody DateEntity dateEntity){
        System.out.println("入?yún)⒌膁ate:"+dateEntity.getDate());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(dateEntity.getDate());
        System.out.println("SimpleDateFormat格式化后的date:"+date);
        DateEntity result = new DateEntity();
        result.setDate(new Date());
        return result;
    }

POJO類中也加上了@JsonFormat注解:

@Data
public class DateEntity {
    @JsonFormat(pattern = "yyyy-MM-dd hh", timezone = "GMT+8")
    private Date date;
}

測(cè)試:

結(jié)果可以看出,@JsonFormat對(duì)時(shí)間格式進(jìn)行了約束 ,mm:ss并沒(méi)有按傳入的值顯示:

再看return的返回值中也可以看出輸出格式是完全按照@JsonFormat約定的時(shí)間格式(“yyyy-MM-dd hh”)進(jìn)行了輸出;

實(shí)際返回結(jié)果:

三、@DateTimeFormat注解

  • 提供者:Spring
  • 作用:可對(duì)java.util.Date、java.uitl.calendar、java.long.Long及Joda時(shí)間類型的屬性進(jìn)行標(biāo)注,主要處理前端時(shí)間類型與后端pojo對(duì)象中的成員變量進(jìn)行數(shù)據(jù)綁定,所約束的時(shí)間格式并不會(huì)影響后端返回前端的時(shí)間類型數(shù)據(jù)格式;
  • 注意(注意!注意!注意!講三遍):前端入?yún)?shù)據(jù)的時(shí)間格式必須與注解中定義的時(shí)間格式相同,不然會(huì)報(bào)錯(cuò),如:@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm”) 則入?yún)⒌母袷奖仨殲?quot;2020-6-4 10:43";
  • 常用注解屬性:
名稱作用
iso類型為DateTimeFormat.ISO,常用值:
DateTimeFormat.ISO.DATE:格式為yyyy-MM-dd
DateTimeFormat.ISO.DATE_TIME:格式為yyyy-MM-dd hh:mm:ss.SSSZ
DateTimeFormat.ISO.TIME:格式為hh:mm:ss.SSSZ
DateTimeFormat.ISO.NONE:表示不使用ISO格式的時(shí)間(默認(rèn)值)
pattern類型為String,使用自定義時(shí)間格式化字符串,如"yyyy-MM-dd hh:mm:ss"
style類型為String,通過(guò)樣式指定日期時(shí)間的格式,由兩位字符組成,
第一位表示日期的樣式,第二位表示時(shí)間的格式,以下是幾個(gè)常用的可選值:
S:短日期/時(shí)間的樣式
M:中日期/時(shí)間的樣式
L:短日期/時(shí)間的樣式
F:完整日期/時(shí)間的樣子
-:忽略日期或時(shí)間的樣式
默認(rèn)值 style=“SS”

controller代碼:

 @RequestMapping("/test")
    public DateEntity getDate(DateEntity dateEntity){
        System.out.println("入?yún)⒌膁ate:"+dateEntity.getDate());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(dateEntity.getDate());
        System.out.println("SimpleDateFormat格式化后的date:"+date);
        DateEntity result = new DateEntity();
        Date date1 = new Date();
        result.setDate(date1);
        return result;
    }

POJO代碼:

@Data
public class DateEntity {
    @DateTimeFormat(pattern = "yyyy-MM-dd hh")
    private Date date;
}

測(cè)試:

-

結(jié)果:

五、總結(jié)@JsonFormat 和 @DateTimeFormat 區(qū)別

  • @JsonFormat 既可以約束前端傳入的時(shí)間類型參數(shù)格式,也可以約束后端響應(yīng)前端的時(shí)間類型格式;
  • @DateTimeFormat
    • 只能約束前端入?yún)r(shí)間類型的格式,并不會(huì)修改原有的日期對(duì)象的格式,如果想要獲得期望的日期格式,是需要自己手動(dòng)轉(zhuǎn)換的;
    • 如果單獨(dú)使用@DateTimeFormat 時(shí),響應(yīng)給前端的時(shí)間會(huì)比實(shí)際時(shí)間晚8個(gè)小時(shí)(時(shí)區(qū)原因)。
    • 針對(duì) @DateTimeFormat 做了補(bǔ)充說(shuō)明,有場(chǎng)景示例比較詳情,需要的大佬可以看一下。傳送門:Spring @DateTimeFormat日期格式化時(shí)注解淺析分享

到此這篇關(guān)于@JsonFormat 和 @DateTimeFormat 時(shí)間格式化注解的文章就介紹到這了,更多相關(guān)@JsonFormat 和 @DateTimeFormat 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的類初始化解析

    Java中的類初始化解析

    這篇文章主要介紹了Java中的類初始化解析,類的初始化是一個(gè)Java類生命周期中的其中一個(gè)階段,初始化是類加載的最后一個(gè)階段,也正是在初始化階段,才會(huì)真正開始執(zhí)行類中所寫的Java代碼,需要的朋友可以參考下
    2023-08-08
  • Java反射 Field類的使用全方位解析

    Java反射 Field類的使用全方位解析

    這篇文章主要介紹了Java反射 Field類的使用全方位解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解

    SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解

    這篇文章主要介紹了SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解,SpringMVC中Spring容器的關(guān)系是通過(guò)監(jiān)聽(tīng)方式啟動(dòng)的,那么Spring與Servlet的Web容器(如:Tomcat、jetty)的關(guān)系則是通過(guò)DispatcherServlet進(jìn)行關(guān)聯(lián),需要的朋友可以參考下
    2024-01-01
  • Java8新特性之重復(fù)注解(repeating annotations)淺析

    Java8新特性之重復(fù)注解(repeating annotations)淺析

    這篇文章主要介紹了Java8新特性之重復(fù)注解(repeating annotations)淺析,這個(gè)新特性只是修改了程序的可讀性,是比較小的一個(gè)改動(dòng),需要的朋友可以參考下
    2014-06-06
  • Java通過(guò) Socket 實(shí)現(xiàn) TCP服務(wù)端

    Java通過(guò) Socket 實(shí)現(xiàn) TCP服務(wù)端

    這篇文章主要介紹了Java通過(guò) Socket 實(shí)現(xiàn) TCP服務(wù)端的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring中的StopWatch記錄操作時(shí)間代碼實(shí)例

    Spring中的StopWatch記錄操作時(shí)間代碼實(shí)例

    這篇文章主要介紹了Spring中的StopWatch記錄操作時(shí)間代碼實(shí)例,spring-framework提供的一個(gè)StopWatch類可以做類似任務(wù)執(zhí)行時(shí)間控制,也就是封裝了一個(gè)對(duì)開始時(shí)間,結(jié)束時(shí)間記錄操作的Java類,需要的朋友可以參考下
    2023-11-11
  • 一篇文章帶你入門Java修飾符

    一篇文章帶你入門Java修飾符

    Java語(yǔ)言提供了很多修飾符,主要分為以下兩類:訪問(wèn)修飾符;非訪問(wèn)修飾符。修飾符用來(lái)定義類、方法或者變量,通常放在語(yǔ)句的最前端。我們通過(guò)下面的例子來(lái)說(shuō)明,下面就跟小編一起來(lái)看下吧
    2021-08-08
  • 詳解Java使用Pipeline對(duì)Redis批量讀寫(hmset&hgetall)

    詳解Java使用Pipeline對(duì)Redis批量讀寫(hmset&hgetall)

    本篇文章主要介紹了Java使用Pipeline對(duì)Redis批量讀寫(hmset&hgetall),具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • mybatisPlus條件構(gòu)造器常用方法小結(jié)

    mybatisPlus條件構(gòu)造器常用方法小結(jié)

    這篇文章主要介紹了mybatisPlus條件構(gòu)造器常用方法,首先是.select和其他條件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Java下載項(xiàng)目中靜態(tài)文件方式

    Java下載項(xiàng)目中靜態(tài)文件方式

    這篇文章主要介紹了Java下載項(xiàng)目中靜態(tài)文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論