Jackson 使用 @JsonFormat 注解进行时间格式化

2021/8/26 6:07:40

本文主要是介绍Jackson 使用 @JsonFormat 注解进行时间格式化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文为博主原创,未经允许不得转载:

  最近帮同事定位了一个现网问题,记录一下:

    项目中对所有请求的参数都进行了 Jackson 序列化,在接收请求的实体类字段上使用 @JsonFormat 注解,该注解的作用是将传入的时间格式化为 注解上指定的格式。在使用过程中 对  @JsonFormat 转换的字段与 string 日期字段转换为 date 类型的日期进行比较时,本来是相同的值,equal 比较时,返回结果为false。主要是由于使用 @JsonFormat 转换时,存在时区问题,才会导致异常。

    使用@JsonFormat 进行格式化转换时,若未标明时区,则默认为 GMT 时区,年月日转换为date 时,会使用GMT 时区,会多 8 小时。若指定时区  timezone = "GMT+8" ,年月日字符串转换之后会是对应的北京时间的0点0分0秒。

@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

   封装一个测试类方法

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());
    }
}

  该方法执行打印的结果如下:

Tue Feb 02 00:00:00 CST 2021
Tue Feb 02 08:00:00 CST 2021

  通过 jackson 转换之后,差了8小时。

  所以在使用过程中,一定要 注意 @JsonFormat 的时区问题。。。。

  



这篇关于Jackson 使用 @JsonFormat 注解进行时间格式化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程