java - 通过 XML 解析器动态将 ZonedDateTime 字符串映射到 LocalDateTime

标签 java xml jaxb timestamp zoneddatetime

我有一个 XML 响应字符串: <timestamp ts="2018-12-05T08:00:00+02:00">55.5</timestamp>

我在JAXB的帮助下映射了这个和注释为:

public class Timestamp {
    @XmlAttribute(name = "ts")
    private String timeStampAsString;
    @XmlValue
    private Double value;

它可以正常工作,但我想自动解析 DateTime来自String ,所以我理想的解决方案应该是

public class Timestamp {

    @XmlAttribute(name = "ts")
    private LocalDateTime timeStampAsLocalDateTime;
    @XmlValue
    private Double value;

我知道我可以在以下帮助下解析字符串:

ZonedDateTime.parse(zonedDateTimeAsString).toLocalDateTime();

但我不确定是否有办法解析这个on fly .

最佳答案

这可以通过 XmlAdapter 来完成。

创建一个扩展XmlAdapter的类,它将String转换为LocalDateTime

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {

    @Override
    public LocalDateTime unmarshal(String v) throws Exception {
        if (v == null) {
            return null;
        }
        return ZonedDateTime.parse(v).toLocalDateTime();
    }

    @Override
    public String marshal(LocalDateTime v) throws Exception {
        if (v == null) {
            return null;
        }
        return v.toString();
    }
 }

并注释要转换为 LocalDateTime 的字段:

    @XmlAttribute(name="ts")
    @XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
    private LocalDateTime timeStampAsLocalDateTime;

(正如评论中已经提到的,LocalDateTime 可能会有问题,OffsetDateTimeInstant 可能更合适。这种方法将是一样,只是替换类和解析逻辑)

关于java - 通过 XML 解析器动态将 ZonedDateTime 字符串映射到 LocalDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58130098/

相关文章:

java - 一种从 Artifact 中删除 jar 的方法

java - Java 多线程中线程状态如何工作?

java - 空指针异常-Eclipse远程Hadoop

php - 创建 URL 字符串时 XML 中的 & 符号问题

ios - NSURLRequest Null(没有编码问题)

java - 使用解析方法时,字符串源未知!

安卓 : How to Parse HTML tags and retrieve information from an HTML page

java - JAXB 解码错误 : Expected elements are <{ } Root>

java - 使用 JAXB 将 XML 数据解析为字符串对象

java - 在根据 dtd 验证 xml 文件时,我是否应该始终创建 EntityResolver?