亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 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 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號