为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2023-09-06 16:45:31
我有一个 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;它按预期工作,但我想自动解析 from DateTime,String所以我理想的解决方案应该有public class Timestamp {    @XmlAttribute(name = "ts")    private LocalDateTime timeStampAsLocalDateTime;    @XmlValue    private Double value;我知道我可以在以下帮助下解析字符串:ZonedDateTime.parse(zonedDateTimeAsString).toLocalDateTime();但我不确定是否有办法解析这个on fly。
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

这可以通过 来完成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可能有问题,OffsetDateTime或者Instant可能更适合。这种方法是相同的,只是替换类和解析逻辑)


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信