问题描述:
在搭建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
错误分析:
- Springboot使用的json解析框架默认是jackjson
- jackjson解析框架在解析实体类里面是date数据类型的数据时的默认格式是:UTC类型,即yyyy-MM-dd’T’HH:mm:ss.SSS,并且默认为+8时区,即时间基础上加8小时
解决方案:
- 在实体Date类型的字段上使用@JsonFormat注解格式化日期
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
- 通过下面方式取消timestamps形式
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
备注:
如果项目中使用json解析框架为fastjson框架,则可使用如下解决方法:
- 在实体字段上使用@JsonFormat注解格式化日期
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
————————————————
版权声明:本文为CSDN博主「北辰之北灬」的原创文章
原文链接:https://blog.csdn.net/pp_fzp/article/details/79588374