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 注解进行时间格式化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-30React Native常用组件-点击组件
- 2024-05-30uniapp+vue3+uv-ui手机端后台OA管理模板
- 2024-05-29Python网络爬虫的时候json=就是让你少写个json.dumps()
- 2024-05-27React Native常用组件-展示组件
- 2024-05-27React Native常用组件-列表组件
- 2024-05-09vue3开发前端表单缓存自定义指令,移动端h5必备插件
- 2024-05-09React Hooks在class组件中的使用方式
- 2024-03-30[OIDC in Action] 2. 基于OIDC(OpenID Connect)的SSO(纯JS客户端)
- 2024-03-29terraform jsonencode
- 2024-03-13vuex-persist