Jackson(二):@JsonFormat时间格式及时区问题

这篇具有很好参考价值的文章主要介绍了Jackson(二):@JsonFormat时间格式及时区问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明

今天遇到一个查了很久的问题,具体表现为前端传过来的时间参数的时区是+0800,我用Jackson反序列化成对象时,时间解析出来还是正确的,但是我再将对象序列化为Json数据时时区又变成了+0000时区,导致前端出现了问题,但是服务器上用命令date看时,时区也是正确的。解决后在此记录一下解决方法。

1.1 @JsonFormat

用途:表示json序列化的一种格式或者类型,常用来转换时间的格式。
用法:@JsonInclude(pattern=日期的格式,timezone=默认是GMT,东八区需要使用GMT+8.值)。
(仅说明时间格式的转换)

二、示例

2.1 操作

测试数据:

  {
  "time1": "2022-09-16T16:26:48+0800",
  "time2": "2022-09-16T16:27:48+0800"
  }

实体类

@JsonIgnoreProperties(ignoreUnknown = true)
@Getter
@Setter
@ToString
public class Body{
  @JsonFormat(pattern = Serializer.DATE_FORMAT, timezone = "GMT+8")
  private Date time1;
  @JsonFormat(pattern = Serializer.DATE_FORMAT, timezone = "GMT+8")
  private Date time2;

封装Jackson的类

public class Serializer{
  public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
  private final ObjectMapper mapper = new ObjectMapper();

  public Serializer() {
    mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
  }
  public Date decodeTime(String str) throws SkyLinkException {
    if (str == null || str.isEmpty()) {
      return null;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
    try {
      return sdf.parse(str);
    } catch (ParseException e) {
      throw new SkyLinkException(e);
    }
  }

  public String encodeTime(Date date) throws SkyLinkException {
    if (date != null) {
      SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
      return sdf.format(date);
    }
    return null;
  }
  
  public <T> String encode(T obj) throws SkyLinkException {
    try {
      return mapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
      throw new SkyLinkException(e);
    }
  }

  public <T> T decode(String json, Class<T> cls) throws SkyLinkException {
    try {
      return mapper.readValue(json, cls);
    } catch (IOException e) {
      throw new SkyLinkException(e);
    }
  }

说明:此处Body类的time1、time2上如果没加上timezone = “GMT+8”,那么我调用Serializer类的encode后,结果time1和time2就变成了2022-09-16T8:26:48+0000。文章来源地址https://www.toymoban.com/news/detail-647615.html

到了这里,关于Jackson(二):@JsonFormat时间格式及时区问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • @DateTimeFormat和@JsonFormat介绍

    @DateTimeFormat 注解是由Spring提供的一个注解, 位于Spring和核心组件之一的context组件 。对应的所需依赖如下: 双击shift快捷键,全局搜索 DateTimeFormat ,查看外部库, DateTimeFormat 本质上是一个接口 @DateTimeFormat 注解的功能是将一个日期字符串转化为对应的Date类型,主要处理前端

    2024年02月01日
    浏览(33)
  • @DateTimeFormat 和 @JsonFormat 注解详解

    这一篇文章足以让你对Java当中Date时间上的理解更上一层楼,本篇文章主要通过代码的形式来进行试验,彻彻底底搞明白日期传参,以及日期返回参数的格式相关问题,每一个步骤都会记得特别详细! 本篇文章主要针对以下三点,来进行代码试验: 不使用这两个注解,前端传

    2024年02月04日
    浏览(31)
  • 详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

    下文中涉及MybatisPlus的逻辑删除的知识,可看我之前这篇文章:详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章:Navicat 设置时间默认值(当前最新时间) 为了使 @JsonFormat 生效,项目必须引入 Jackson 库的相关依赖: (如果是springboot项目,可不

    2024年01月23日
    浏览(39)
  • jackson库收发json格式数据和ajax发送json格式的数据

    一、jackson库收发json格式数据   jackson库是maven仓库中用来实现组织json数据功能的库。 json格式  json格式一个组织数据的字符文本格式,它用键值对的方式存贮数据,json数据都是有一对对键值对组成的,键只能是字符串,用双引号包括;值可以是字符串,数字,布尔表达式

    2024年02月13日
    浏览(46)
  • Json-序列化字符串时间格式问题

    最近C#中需要将实体进行json序列化,使用了Newtonsoft.Json 序列化出来的Json字符串有两个问题 1.没有进行格式化,对使用人员不友好; 2.时间字段形式为数字形式; ​​ 查了一下网上对于时间字段建议先转换成字符串,再json序列化,但是发现可以通过自定义时间格式进行json序

    2024年02月19日
    浏览(42)
  • 【夏令时】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天

    用@JsonFormat(pattern = \\\"yyyy-MM-dd\\\")注解,出生日期竟然年轻了一天 艺术源于生活,bug源于开发。 起因是艰苦奋战一个月, 测试及验收都顺利通过 ,上线也稳稳的 成功 。但是 毒奶 总是在不经意给你灌上,部分的用户的 身份证和出生日期对不上,总是少一天 。 开始以为 前端显

    2024年02月11日
    浏览(38)
  • 时间格式化以及指定时区(time&&timezone)

    工作中经常遇到按照指定格式的时间进行展示。可参考以下脚本逻辑满足需求 工作中会遇到指定时区的需求,不管从全球哪个国家的用户访问产品,都以指定时区来展示时间。

    2024年02月08日
    浏览(40)
  • Python time时间格式化以及设置时区

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块我在之前的文章已经有所介绍,它提供 的接口与C标准库time.h基本一致。相比于time模块,datetime模块的接口则更直观、更容易调用。今天就来讲讲datetime模块。 datetime模块定义了两个常量:datetime.MI

    2024年02月08日
    浏览(64)
  • Ubuntu、CentOS 修改时区、设置24小时时间格式

     修改设置时区  方法一 tzselect 方法二 仅限于RedHat Linux 和 CentOS系统 timeconfig 方法三 适用于Debian dpkg-reconfigure tzdata 方法四 复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件 cp /usr/share/zoneinfo/EST5EDT /etc/localtime 或者 ln -s /usr/share/zoneinfo/EST5EDT /etc/localtime 时间同步

    2024年02月05日
    浏览(45)
  • ES 如何将国际标准时间格式进行格式化与调整时区

            需求,日志收集的时候,时间格式是国际标准时间格式。形如yyyy-MM-dd\\\'T\\\'HH:mm:ss.SSS。 (2023-12-05T02:45:50.282Z)这个时区也不对,那如何将此类型的时间,进行格式化呢?         本篇文章体统一个案例,可以格式化各种类型的时间,已经调整到各个时区。     

    2024年01月19日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包