最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、時間傳值

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

二、@DateTimeFormat

該注解主要解決前端時間控件傳值到后臺接收準確的Date類屬性的問題,我們可以在需要接收的類中對應的時間類型屬性上加上@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

同樣,我們在對應的接收對象時間類型上加上@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其實既可以把傳給后臺的時間字符串轉(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”])]

時間格式還是不準確,可能我們考慮是不是注解不好用,錯了,是你的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就可以,默認的日期格式就是"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ā)請求

響應

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

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

相關文章

最新評論

鹤庆县| 明溪县| 凤冈县| 夏津县| 台山市| 濮阳县| 潍坊市| 中西区| 泽库县| 林周县| 庆城县| 南京市| 沂水县| 华池县| 深水埗区| 高平市| 邹城市| 达孜县| 织金县| 富川| 呼伦贝尔市| 玉屏| 东乡县| 西畴县| 阿克陶县| 汪清县| 紫云| 长泰县| 徐汇区| 绥棱县| 黄大仙区| 佳木斯市| 鄂尔多斯市| 凉城县| 托克逊县| 甘孜| 丰县| 桐城市| 甘谷县| 修水县| 博客|