Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法序列化jackson xml中的OffsetDateTime_Java_Spring Boot_Java 8 - Fatal编程技术网

Java 无法序列化jackson xml中的OffsetDateTime

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

我正在使用Jackson库将POJO映射到XML。序列化
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