0


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@ToStringpublicclassBody{@JsonFormat(pattern =Serializer.DATE_FORMAT, timezone ="GMT+8")privateDate time1;@JsonFormat(pattern =Serializer.DATE_FORMAT, timezone ="GMT+8")privateDate time2;

封装Jackson的类

publicclassSerializer{publicstaticfinalString DATE_FORMAT ="yyyy-MM-dd'T'HH:mm:ssZ";privatefinalObjectMapper mapper =newObjectMapper();publicSerializer(){
    mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);}publicDatedecodeTime(String str)throwsSkyLinkException{if(str ==null|| str.isEmpty()){returnnull;}SimpleDateFormat sdf =newSimpleDateFormat(DATE_FORMAT);try{return sdf.parse(str);}catch(ParseException e){thrownewSkyLinkException(e);}}publicStringencodeTime(Date date)throwsSkyLinkException{if(date !=null){SimpleDateFormat sdf =newSimpleDateFormat(DATE_FORMAT);return sdf.format(date);}returnnull;}public<T>Stringencode(T obj)throwsSkyLinkException{try{return mapper.writeValueAsString(obj);}catch(JsonProcessingException e){thrownewSkyLinkException(e);}}public<T>Tdecode(String json,Class<T> cls)throwsSkyLinkException{try{return mapper.readValue(json, cls);}catch(IOException e){thrownewSkyLinkException(e);}}

说明:此处Body类的time1、time2上如果没加上timezone = “GMT+8”,那么我调用Serializer类的encode后,结果time1和time2就变成了2022-09-16T8:26:48+0000。

标签: java json 前端

本文转载自: https://blog.csdn.net/weixin_42717117/article/details/126892612
版权归原作者 SISD 所有, 如有侵权,请联系我们删除。

“Jackson(二):@JsonFormat时间格式及时区问题”的评论:

还没有评论