Spring Boot中Date类型出现JSON解析错误问题

问题描述:
在搭建Spring Boot项目时,客户端传输JSON包含日期数据,日期格式为:yyyy-MM-dd HH:mm,测试调用时报如下错误:

{
  "timestamp": "2020-04-21T08:39:21.810+0000",
  "status": 400,
  "error": "Bad Request",
  "message": "JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"2020-04-21 16:16\": not a valid representation (error: Failed to parse Date value \u00272020-04-21 16:16\u0027: Cannot parse date \"2020-04-21 16:16\": while it seems to fit format \u0027yyyy-MM-dd\u0027T\u0027HH:mm:ss.SSSZ\u0027, parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"2020-04-21 16:16\": not a valid representation (error: Failed to parse Date value \u00272020-04-21 16:16\u0027: Cannot parse date \"2020-04-21 16:16\": while it seems to fit format \u0027yyyy-MM-dd\u0027T\u0027HH:mm:ss.SSSZ\u0027, parsing fails (leniency? null))\n at [Source: (PushbackInputStream); line: 4, column: 15] (through reference chain: com.chan.mybatis_anno.entities.Employee[\"hireDate\"])",
  "path": "/"
}

错误为:不能将日期字符串"2020-04-21 16:16"解析为java.util.Date

错误分析:

  1. Springboot使用的json解析框架默认是jackjson
  2. jackjson解析框架在解析实体类里面是date数据类型的数据时的默认格式是:UTC类型,即yyyy-MM-dd’T’HH:mm:ss.SSS,并且默认为+8时区,即时间基础上加8小时

解决方案:

  1. 在实体Date类型的字段上使用@JsonFormat注解格式化日期
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
  1. 通过下面方式取消timestamps形式
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

备注:
如果项目中使用json解析框架为fastjson框架,则可使用如下解决方法:

  1. 在实体字段上使用@JsonFormat注解格式化日期
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")

————————————————
版权声明:本文为CSDN博主「北辰之北灬」的原创文章
原文链接:https://blog.csdn.net/pp_fzp/article/details/79588374

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值