【问题标题】:Equivalent of annotation @JsonDeserialize for XML等效于 XML 的注解 @JsonDeserialize
【发布时间】:2018-09-08 13:05:37
【问题描述】:

我正在寻找一个注释来对 XML 响应和 JSON 响应做同样的事情,即将日期转换为毫秒。对于 JSON 响应,我会这样做:

@JsonDeserialize(using = DateToMillisecsDeserializer.class)
private Long millisecs;

然后在 DateToMillisecsDeseriliazer 类中使用 @Override 反序列化来转换日期。

我怎样才能为 XML 响应完成同样的事情?

谢谢!

【问题讨论】:

  • 大致相当于@XmlJavaTypeAdapterXmlAdapter,但序列化和反序列化在同一个适配器类中一起完成。
  • @ThomasFritsch 你为什么不把这个作为答案发布?

标签: java xml serialization jackson jaxb


【解决方案1】:

用于 XML 的 @XmlJavaTypeAdapter 注释 大致相当于@JsonDeserialize@JsonSerialize 一起用于 JSON。

它指的是XmlAdapter 类 这相当于JsonDeserializerJsonSerializer 一起上课。

示例:

XML 元素之间的转换喜欢

<date>2018-03-29T20:00:00Z</date>

一个Long Java 字段自 1970.0 以来的毫秒数可以这样完成:

@XmlElement(name = "date")
@XmlJavaTypeAdapter(DateMillisecsAdapter.class)
private Long millisecs;

注解是指进行实际转换的适配器类。 方法unmarshal 用于反序列化,marshal 用于序列化。

public class DateMillisecsAdapter extends XmlAdapter<String, Long> {

    private DateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ssX");

    @Override
    public Long unmarshal(String s) throws Exception {
        if (s == null)
            return null;
        return dateFormat.parse(s).getTime();
    }

    @Override
    public String marshal(Long millisecs) throws Exception {
        if (millisecs == null)
            return null;
        return dateFormat.format(new Date(millisecs));
    }
}

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多