Java 无法序列化jackson xml中的OffsetDateTime
我正在使用Jackson库将POJO映射到XML。序列化Java 无法序列化jackson xml中的OffsetDateTime,java,spring-boot,java-8,Java,Spring Boot,Java 8,我正在使用Jackson库将POJO映射到XML。序列化OffsetDateTime字段时,我将在父标记中包含的多个标记中获得输出 compile ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.0') 尝试序列化下面给出的OffsetDateTime字段时 @JacksonXmlProperty(localName = "InvoiceStatusDate") private OffsetDateTime inv
OffsetDateTime
字段时,我将在父标记中包含的多个标记中获得输出
compile ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.0')
尝试序列化下面给出的OffsetDateTime
字段时
@JacksonXmlProperty(localName = "InvoiceStatusDate")
private OffsetDateTime invoiceStatusDate;
我将得到解析后的XML作为
19800
+05:30
真的
14
48
43
988195000
9
2019
九月
4.
星期三
247
但我需要像这样的东西
<InvoiceStatusDate>2019-09-05T15:08:53.549+05:30</InvoiceStatusDate>
2019-09-05T15:08:53.549+05:30
这是由于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;
/*
....
*/
}
我将让您检查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
类型的结构
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;
/*
....
*/
}
我将让您检查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
时间,则使用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;
}
有关更多信息,请查看这两个问题:在使用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;
}
有关更多信息,请查看这两个问题:此@JsonFormat不适用于xml此@JsonFormat不适用于xml