今日份鸡汤:不管世事多艰难,别忘了,看开点儿再温柔点儿,不要满身戾气,也不要紧皱眉头,生活都是在眉开眼笑的时候,一天天好起来的。早安。
异常详细信息:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.util.Date
from String "2020-10-14 13:56:30.0": not a valid representation (error: Failed to parse Date value '2020-10-14 13:56:30.0': Cannot parse date "2020-10-14 13:56:30.0": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSX', parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.util.Date
from String "2020-10-14 13:56:30.0": not a valid representation (error: Failed to parse Date value '2020-10-14 13:56:30.0': Cannot parse date "2020-10-14 13:56:30.0": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSX', parsing fails (leniency? null))
出现问题的场景:
今天开发的时候,调用依赖的他人接口出现了不能将[字符串]转换为日期异常。
原因:
格式不一致,不能直接成功转化。
解决方法:
@JsonFormat注解很好的解决了这个问题,在对应的实体日期属性上增加这个注解 就可以解决这个问题了。不过一般的时候要注意timezone这个参数,按照你的需求去做相应的指定。或者不指定使用默认。
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
常用属性:
shap: 表示序列化后的一种类型,默认为JsonFormat.Shape.ANY
pattern: 表示日期的格式,默认为序列化以后的格式,比如:2020-09-08T15:19:09.000+00:00
timezone: 默认是GMT,中国需要GMT+8
locale: 根据位置序列化的一种格式,默认为本地的语言简称,中国的语言简称为zh_CN
时区简介:
GMT:Greenwich Mean Time 格林尼治标准时间。这是以英国格林尼治天文台观测结果得出的时间,这是英国格林尼治当地时间,这个地方的当地时间过去被当成世界标准的时间。
UT:Universal Time 世界时。根据原子钟计算出来的时间。
UTC:Coordinated Universal Time 协调世界时。因为地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年协调世界时组织都会给世界时+1秒,让基于原子钟的世界时和基于天文学(人类感知)的格林尼治标准时间相差不至于太大。并将得到的时间称为UTC,这是现在使用的世界标准时间。
协调世界时不与任何地区位置相关,也不代表此刻某地的时间,所以在说明某地时间时要加上时区
也就是说GMT并不等于UTC,而是等于UTC+0,只是格林尼治刚好在0时区上。
GMT = UTC+0
格林尼治时间(GMT)、世界协调时间(UTC)和中国时间的关系
中国时间(Asia/Shanghai) = 格林尼治时间(GMT) + 8
格林尼治时间(GMT) = 世界协调时间(UTC) + 0
注意:@JsonFormat注解默认的时区为格林尼治时间,比中国时间(东八区是要小8个小时的)。
导入的依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.2</version>
</dependency>
网友评论