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

Java中@DateTimeFormat @JsonFormat失效原因及測(cè)試填坑

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

一、時(shí)間傳值

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

二、@DateTimeFormat

該注解主要解決前端時(shí)間控件傳值到后臺(tái)接收準(zhǔn)確的Date類(lèi)屬性的問(wèn)題,我們可以在需要接收的類(lèi)中對(duì)應(yīng)的時(shí)間類(lèi)型屬性上加上@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

同樣,我們?cè)趯?duì)應(yīng)的接收對(duì)象時(shí)間類(lèi)型上加上@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使用場(chǎng)景

@DateTimeFormat只會(huì)在類(lèi)似@RequestParam的請(qǐng)求參數(shù)(url拼接的參數(shù)才生效)上生效,如果@DateTimeFormat放到@RequestBody下是無(wú)效的。

@JsonFormat使用場(chǎng)景

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

通常情況下@RequestBody用的比較多演示@JsonFormat使用場(chǎng)景

代碼

/**
 * @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;
}

傳輸對(duì)象

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

用apiPost測(cè)試時(shí)測(cè)試字符串

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

看似沒(méi)有問(wèn)題但后臺(tái)一直報(bào)錯(cuò)

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”])]

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

必須是json格式化出來(lái)的字符串

json工具類(lèi)

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 {
    /**
     * 功能描述: 重載方法,只傳入一個(gè)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)方法,拿來(lá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());
        //不使用時(shí)間差的方式  WRITE_DATE_KEYS_AS_TIMESTAMPS:將日期鍵作為時(shí)間戳寫(xiě)入 改為false
        mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
        SimpleDateFormat format = new SimpleDateFormat(dateformat);
        //指定日期格式
        mapper.setDateFormat(format);
        try {
            //就是不是日期對(duì)象也不影響,都是正常調(diào)用了writeValueAsString方法
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        //如果有異常,就返回null
        return null;
    }
}

格式化出來(lái)的字符串

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

然后再發(fā)請(qǐng)求

響應(yīng)

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

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

相關(guān)文章

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

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

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

    Java老矣 尚能飯否?

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

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

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

    java中的編碼轉(zhuǎn)換過(guò)程(以u(píng)tf8和gbk為例)

    這篇文章主要介紹了java中的編碼轉(zhuǎn)換過(guò)程(以u(píng)tf8和gbk為例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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ù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    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)行了界面化處理,感興趣的小伙伴可以動(dòng)手試一試
    2022-02-02
  • Java中的static的使用指南

    Java中的static的使用指南

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

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

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

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

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

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

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

最新評(píng)論