Jackson 使用 @JsonFormat 注解进行时间格式化
本文為博主原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載:
最近幫同事定位了一個(gè)現(xiàn)網(wǎng)問題,記錄一下:
項(xiàng)目中對(duì)所有請(qǐng)求的參數(shù)都進(jìn)行了Jackson序列化,在接收請(qǐng)求的實(shí)體類字段上使用 @JsonFormat注解,該注解的作用是將傳入的時(shí)間格式化為注解上指定的格式。在使用過(guò)程中對(duì)@JsonFormat轉(zhuǎn)換的字段與string日期字段轉(zhuǎn)換為date類型的日期進(jìn)行比較時(shí),本來(lái)是相同的值,equal比較時(shí),返回結(jié)果為false。主要是由于使用 @JsonFormat轉(zhuǎn)換時(shí),存在時(shí)區(qū)問題,才會(huì)導(dǎo)致異常。
使用@JsonFormat進(jìn)行格式化轉(zhuǎn)換時(shí),若未標(biāo)明時(shí)區(qū),則默認(rèn)為GMT時(shí)區(qū),年月日轉(zhuǎn)換為date時(shí),會(huì)使用GMT時(shí)區(qū),會(huì)多 8小時(shí)。若指定時(shí)區(qū)timezone = "GMT+8" ,年月日字符串轉(zhuǎn)換之后會(huì)是對(duì)應(yīng)的北京時(shí)間的0點(diǎn)0分0秒。
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
封裝一個(gè)測(cè)試類方法
package com.example.demo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import java.util.Date;
@Data
public class JacksonTest {
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date date;
@JsonFormat(pattern="yyyy-MM-dd")
private Date date2;
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = "{"date":"2021-02-02","date2":"2021-02-02"}";
JacksonTest test = objectMapper.readValue(jsonStr,JacksonTest.class);
System.out.println(test.getDate());
System.out.println(test.getDate2());
}
}
該方法執(zhí)行打印的結(jié)果如下:
Tue Feb 02 00:00:00 CST 2021 Tue Feb 02 08:00:00 CST 2021
通過(guò)jackson轉(zhuǎn)換之后,差了8小時(shí)。
所以在使用過(guò)程中,一定要注意@JsonFormat的時(shí)區(qū)問題。。。。
總結(jié)
以上是生活随笔為你收集整理的Jackson 使用 @JsonFormat 注解进行时间格式化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何做好 Android 端音视频测试?
- 下一篇: js 三元表达式 复杂写法