gpt4 book ai didi

java - 无法序列化 Jackson xml 中的 OffsetDateTime

转载 作者:行者123 更新时间:2023-12-02 00:57:32 33 4
gpt4 key购买 nike

我正在使用 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>

最佳答案

这是由 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;
/*
....
*/
}

它有一个 LocalDateTimeZoneOffset 作为属性。

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;

更改属性 getter 在序列化过程中处理此字段的方式

@JacksonXmlProperty(localName = "InvoiceStatusDate")
public LocalDateTime getInvoceStatusDate() {
return formatInvoiceDate();
}

private LocalDateTime formatInvoiceDate() {
// do processing logic here
}

或者

如果没有要求将InvoiceStatusDate保留为OffsetDate时间,请将其保留为LocalDateTime

关于java - 无法序列化 Jackson xml 中的 OffsetDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57802647/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com