与 @JsonDeserialize 注解等效的 XML 注解是什么?

3

我正在寻找一种注释,可以像JSON响应一样转换XML响应中的日期为毫秒值。对于JSON响应,我会这样做:

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

然后在类 DateToMillisecsDeseriliazer 中使用 @Override deserialize 将日期转换为毫秒。

那么我如何在 XML 响应中实现完全相同的事情呢?

谢谢!


2
它大致相当于 @XmlJavaTypeAdapterXmlAdapter,但序列化和反序列化在同一个适配器类中完成。 - Thomas Fritsch
@ThomasFritsch 为什么你不把这个发表为答案呢? - lexicore
1个回答

3

@XmlJavaTypeAdapter注释用于处理XML,与JSON中的@JsonDeserialize@JsonSerialize注释大致相当。

它涉及到一个XmlAdapter类,该类相当于JsonDeserializerJsonSerializer类的组合。

例如:

将XML元素转换为:

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

如果想在Java中使用毫秒数自1970年以来表示时间,可以使用名为Long的字段,具体实现方法如下:

@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));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接