【发布时间】:2019-05-18 03:49:51
【问题描述】:
我有一个带有 @JsonFormat 的 LocalDateTime 字段
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")
private LocalDateTime dateTime;
当 Jackson 尝试解析像 2018-11-28T15:24:00.000Z 这样的日期时,会引发异常
com.fasterxml.jackson.databind.JsonMappingException:无法构造 java.time.LocalDateTime 的实例:没有从字符串值反序列化的字符串参数构造函数/工厂方法('2018-11-28T15:24:00.000Z' )
在我的 pom.xml 我有:
- 弹簧靴 1.5.7
- jackson-datatype-jdk8
- jackson-datatype-jsr310
我的 ObjectMapper Bean:
@Bean
public ObjectMapper postConstruct() {
return this.builder
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.defaultUseWrapper(false)
.build();
}
我也试过了:
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'", timezone ="UTC")
private LocalDateTime dateTime;
【问题讨论】:
-
您的数据类型错误。您的格式模式忽略了有价值的信息,最后的
Z表示 UTC。删除'Z'周围的引号。然后解析为Instant或OffsetDateTime来表示一个时刻。根据定义,LocalDateTime不能 代表一个时刻,因为它故意缺少任何时区概念或与 UTC 的偏移量。 -
我将LocalDateTime改为ZoneDateTime,去掉引号,但是抛出了JsonMappingException
-
Z表示 UTC,而不是 full time zone。所以ZonedDateTime不合适。Instant是您需要的课程:Instant.parse( "2018-11-28T15:24:00.000Z" )。抱歉,在杰克逊方面无法为您提供帮助。你搜索过堆栈溢出吗?已经多次询问并回答了杰克逊的日期时间访问。 -
你试过用
Date代替LocalDateTime@cvdr
标签: java spring-boot jackson