spring 带有DateTimeFormat的OffsetDateTime的Jackson序列化,ISO.DATE_TIME忽略零毫秒

mkshixfv  于 2023-03-07  发布在  Spring
关注(0)|答案(1)|浏览(131)

我有一个类,它将被序列化为JSON,具有以下属性:

@JsonProperty("validTo")
  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
  private OffsetDateTime validTo;

我还在Jackson中使用了默认的Spring启动ObjectMapper,如果validTo DateTime有非零的毫秒/纳秒,这个方法可以正常工作,但是,如果它们是零,那么结果将根本不包括它们。
OffsetDateTime.of(2000, 10, 10, 10, 10, 10, 1000000, ZoneOffset.UTC)将正确转换为2000-10-10T10:10:10.001Z
但是OffsetDateTime.of(2000, 10, 10, 10, 10, 10, 0, ZoneOffset.UTC)会错误地转换为2000-10-10T10:10:10Z
为什么会这样呢?注解中使用的javadoc格式将其描述为The most common ISO Date Time Format yyyy-MM-dd'T'HH:mm:ss.SSSXXX — for example, "2000-10-31T01:30:00.000-05:00".,其中似乎包含零。

cvxl0en2

cvxl0en21#

看起来Jackson忽略了@DateTimeFormat注解,而真实的的序列化发生在com.fasterxml.jackson.datatype.jsr310.ser.OffsetDateTimeSerializer中。
如果像这样注解字段,则可以测试它(不会影响结果):

@JsonProperty("creationDateTime")
@DateTimeFormat(pattern = "yyyy")
private OffsetDateTime validTo;

相关问题