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

Java中@DateTimeFormat @JsonFormat失效原因及測試填坑

 更新時間:2023年06月26日 09:35:50   作者:liuec1002  
本文主要介紹了Java中@DateTimeFormat @JsonFormat失效原因及測試填坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、時間傳值

前端時間控件,一般情況下直接會傳一個yyyy-MM-dd的日期字符串到后臺。這個時候如果我們直接用java.util.Date類型就無法正確接收到?;蛘呶覀儚臄?shù)據(jù)庫里查到DateTime類型并且用java的Date類型接收并返回給前臺的時候,前臺也無法用yyyy-MM-dd的形式進(jìn)行呈現(xiàn)。這個時候,前面兩種情況分別對應(yīng)了@DateTimeFormat和@JsonFormat注解的使用。

二、@DateTimeFormat

該注解主要解決前端時間控件傳值到后臺接收準(zhǔn)確的Date類屬性的問題,我們可以在需要接收的類中對應(yīng)的時間類型屬性上加上@DateTimeFormat注解,并在注解中加上pattern屬性,例如:

/**
 * @author liu
 * @date 2022年04月14日 16:31
 */
@Data
public class User {
    private String createTime;
    private String orderTime;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
   // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    //@DateFormatValidation(format = "yyyy-MM-dd HH:mm:ss", message = "與要求的日期格式[yyyy-MM-dd HH:mm:ss]不符")
    private LocalDateTime genTime;
}

三、@JsonFormat

同樣,我們在對應(yīng)的接收對象時間類型上加上@JsonFormat注解,并在注解中加上pattern屬性以及timezone屬性

例如

/**
 * @author liu
 * @date 2022年04月14日 16:31
 */
@Data
public class User {
    private String createTime;
    private String orderTime;
   // @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    //@DateFormatValidation(format = "yyyy-MM-dd HH:mm:ss", message = "與要求的日期格式[yyyy-MM-dd HH:mm:ss]不符")
    private LocalDateTime genTime;
}

@DateTimeFormat使用場景

@DateTimeFormat只會在類似@RequestParam的請求參數(shù)(url拼接的參數(shù)才生效)上生效,如果@DateTimeFormat放到@RequestBody下是無效的。

@JsonFormat使用場景

在@RequestBody中則可以使用@JsonFormat把傳給后臺的時間字符串轉(zhuǎn)成Date,也就是說**@JsonFormat其實(shí)既可以把傳給后臺的時間字符串轉(zhuǎn)成Date也可以把后臺傳出的Date轉(zhuǎn)成時間字符串**。

通常情況下@RequestBody用的比較多演示@JsonFormat使用場景

代碼

/**
 * @author liu
 * @date 2022年04月14日 16:31
 */
@Data
public class User {
    private String createTime;
    private String orderTime;
   // @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    //@DateFormatValidation(format = "yyyy-MM-dd HH:mm:ss", message = "與要求的日期格式[yyyy-MM-dd HH:mm:ss]不符")
    private LocalDateTime genTime;
}

傳輸對象

/**
 * @author liu
 * @date 2022年04月26日 10:42
 */
@Data
public class UserSaveDto {
    private  String code;
    private List<User> list ;
}

用apiPost測試時測試字符串

{
“code”: “11”,
“l(fā)ist”: [
{
“createTime”: “aa”,
“orderTime”: “xx”,
“genTime”: “2022-04-26 15:17:59”
}
]
}

看似沒有問題但后臺一直報錯

2022-04-26 15:50:22.423 WARN 39112 — [nio-9090-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.time.LocalDateTime from String “2022-04-26 15:17:59”: Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text ‘2022-04-26 15:17:59’ could not be parsed at index 11; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.time.LocalDateTime from String “2022-04-26 15:17:59”: Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text ‘2022-04-26 15:17:59’ could not be parsed at index 11 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 68] (through reference chain: com.example.demo.test.UserSaveDto[“list”]->java.util.ArrayList[0]->com.example.demo.test.User[“genTime”])]

時間格式還是不準(zhǔn)確,可能我們考慮是不是注解不好用,錯了,是你的json字符串有問題

必須是json格式化出來的字符串

json工具類

package com.example.demo.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.text.SimpleDateFormat;
/**
 * @author liu
 * @date 2022年04月26日 15:02
 */
public class JsonUtils {
    /**
     * 功能描述: 重載方法,只傳入一個object就可以,默認(rèn)的日期格式就是"yyyy-MM-dd HH:mm:ss"
     * @return java.lang.String
     */
    public static String getJson(Object object) {
        return getJson(object, "yyyy-MM-dd HH:mm:ss");
    }
    //靜態(tài)方法,拿來即用,日期就輸入格式,不是日期就調(diào)用上面的,就日期格式也不影響
    public static String getJson(Object object, String dateformat) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        mapper.registerModule(new JavaTimeModule());
        //不使用時間差的方式  WRITE_DATE_KEYS_AS_TIMESTAMPS:將日期鍵作為時間戳寫入 改為false
        mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
        SimpleDateFormat format = new SimpleDateFormat(dateformat);
        //指定日期格式
        mapper.setDateFormat(format);
        try {
            //就是不是日期對象也不影響,都是正常調(diào)用了writeValueAsString方法
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        //如果有異常,就返回null
        return null;
    }
}

格式化出來的字符串

{
“code”: “11”,
“l(fā)ist”: [
{
“createTime”: “aa”,
“orderTime”: “xx”,
“genTime”: “2022-04-26 15:17:59”
}
]
}

然后再發(fā)請求

響應(yīng)

[User(createTime=aa, orderTime=xx, genTime=2022-04-26T15:17:59)]

 到此這篇關(guān)于Java中@DateTimeFormat @JsonFormat失效原因及測試填坑的文章就介紹到這了,更多相關(guān)Java @DateTimeFormat @JsonFormat失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中Date類和Strng類的靈活轉(zhuǎn)化

    java中Date類和Strng類的靈活轉(zhuǎn)化

    這篇文章主要介紹了java中Date類和Strng類的靈活轉(zhuǎn)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java老矣 尚能飯否?

    Java老矣 尚能飯否?

    Java老矣,尚能飯否?各類編程語言橫空出世,紛戰(zhàn)不休,然而 TIOBE 的語言排行榜上,Java 卻露出了明顯的頹勢。這個老牌的語言,未來會是怎樣?
    2017-06-06
  • SpringBoot全局配置long轉(zhuǎn)String丟失精度的問題解決

    SpringBoot全局配置long轉(zhuǎn)String丟失精度的問題解決

    web項(xiàng)目中,Java后端傳過來的Long/long類型,前端JS接收會丟失精度。那么應(yīng)該如何解決,本文就來介紹一下幾種方法,感興趣的可以了解一下
    2021-08-08
  • java中的編碼轉(zhuǎn)換過程(以utf8和gbk為例)

    java中的編碼轉(zhuǎn)換過程(以utf8和gbk為例)

    這篇文章主要介紹了java中的編碼轉(zhuǎn)換過程(以utf8和gbk為例),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • spring boot中使用@Async實(shí)現(xiàn)異步調(diào)用任務(wù)

    spring boot中使用@Async實(shí)現(xiàn)異步調(diào)用任務(wù)

    本篇文章主要介紹了spring boot中使用@Async實(shí)現(xiàn)異步調(diào)用任務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java實(shí)現(xiàn)游戲飛機(jī)大戰(zhàn)-III的示例代碼

    Java實(shí)現(xiàn)游戲飛機(jī)大戰(zhàn)-III的示例代碼

    這篇文章主要為大家介紹了如何利用Java實(shí)現(xiàn)經(jīng)典的游戲之飛機(jī)大戰(zhàn),文中采用了swing技術(shù)進(jìn)行了界面化處理,感興趣的小伙伴可以動手試一試
    2022-02-02
  • Java中的static的使用指南

    Java中的static的使用指南

    本文給大家簡單總結(jié)了下java中的static的使用注意事項(xiàng)及方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-04-04
  • JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題

    JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題

    這篇文章主要介紹了JAVA中堆、棧,靜態(tài)方法和非靜態(tài)方法的速度問題,堆和棧得速度性能分析多角度給大家分析,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Java 二維碼,QR碼,J4L-QRCode 的資料整理

    Java 二維碼,QR碼,J4L-QRCode 的資料整理

    本文主要介紹Java 中二維碼,QR碼,J4L-QRCode,這里整理了詳細(xì)的資料供大家學(xué)習(xí)參考關(guān)于二維碼的知識,有需要的小伙伴可以參考下
    2016-08-08
  • 使用springboot開發(fā)的第一個web入門程序的實(shí)現(xiàn)

    使用springboot開發(fā)的第一個web入門程序的實(shí)現(xiàn)

    這篇文章主要介紹了使用springboot開發(fā)的第一個web入門程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論