我使用Jackson库将POJO映射到XML。在序列化OffsetDateTime
字段时,我在父标记中包含的多个标记中获得了输出。
compile ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.0')
当尝试序列化下面给出的OffsetDateTime
字段时,
@JacksonXmlProperty(localName = "InvoiceStatusDate")
private OffsetDateTime invoiceStatusDate;
我得到的解析后的XML是这样的
<InvoiceStatusDate>
<offset>
<totalSeconds>19800</totalSeconds>
<id>+05:30</id>
<rules>
<fixedOffset>true</fixedOffset>
<transitions />
<transitionRules />
</rules>
</offset>
<hour>14</hour>
<minute>48</minute>
<second>43</second>
<nano>988195000</nano>
<monthValue>9</monthValue>
<year>2019</year>
<month>SEPTEMBER</month>
<dayOfMonth>4</dayOfMonth>
<dayOfWeek>WEDNESDAY</dayOfWeek>
<dayOfYear>247</dayOfYear>
</InvoiceStatusDate>
但我需要像这样的东西
<InvoiceStatusDate>2019-09-05T15:08:53.549+05:30</InvoiceStatusDate>
发布于 2019-09-05 11:47:48
这是由于OffsetDateTime
类型的结构造成的。
public final class OffsetDateTime implements Temporal, TemporalAdjuster, Comparable<OffsetDateTime>, Serializable {
public static final OffsetDateTime MIN;
public static final OffsetDateTime MAX;
private static final long serialVersionUID = 2287754244819255394L;
private final LocalDateTime dateTime;
private final ZoneOffset offset;
/*
....
*/
}
它有一个LocalDateTime
和ZoneOffset
作为属性。
LocalDateTime
也是如此:
public final class LocalDateTime implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
public static final LocalDateTime MIN;
public static final LocalDateTime MAX;
private static final long serialVersionUID = 6207766400415563566L;
private final LocalDate date;
private final LocalTime time;
/*
...
*/
}
我会让你检查ZoneOffset
的结构。基本上jackson是按原样序列化对象(例如,获取属性值并为其创建一个xml元素)。
您可以做的是修改属性的呈现方式
用代替:
@JacksonXmlProperty(localName = "InvoiceStatusDate")
private OffsetDateTime invoiceStatusDate;
Do
更改属性getter在序列化过程中处理此字段的方式
@JacksonXmlProperty(localName = "InvoiceStatusDate")
public LocalDateTime getInvoceStatusDate() {
return formatInvoiceDate();
}
private LocalDateTime formatInvoiceDate() {
// do processing logic here
}
或
如果不要求将InvoiceStatusDate保留为OffsetDate
时间,请将其保留为LocalDateTime
发布于 2019-09-05 12:12:19
在使用Jackson库将日期从java.time
解析为JSON时,也存在类似的问题。基本上,您需要提供格式信息:
@JacksonXmlProperty(localName = "InvoiceStatusDate")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getInvoiceStatusDate() {
return invoiceStatusDate;
}
有关更多信息,请查看这两个问题:Spring Data JPA - ZonedDateTime format for json serialization和Jackson deserialize date from Twitter to ZonedDateTime
https://stackoverflow.com/questions/57802647
复制相似问题