我正在寻找一种注释,可以像JSON响应一样转换XML响应中的日期为毫秒值。对于JSON响应,我会这样做:
@JsonDeserialize(using = DateToMillisecsDeserializer.class)
private Long millisecs;
然后在类 DateToMillisecsDeseriliazer 中使用 @Override deserialize 将日期转换为毫秒。
那么我如何在 XML 响应中实现完全相同的事情呢?
谢谢!
我正在寻找一种注释,可以像JSON响应一样转换XML响应中的日期为毫秒值。对于JSON响应,我会这样做:
@JsonDeserialize(using = DateToMillisecsDeserializer.class)
private Long millisecs;
然后在类 DateToMillisecsDeseriliazer 中使用 @Override deserialize 将日期转换为毫秒。
那么我如何在 XML 响应中实现完全相同的事情呢?
谢谢!
@XmlJavaTypeAdapter
注释用于处理XML,与JSON中的@JsonDeserialize
和@JsonSerialize
注释大致相当。
它涉及到一个XmlAdapter
类,该类相当于JsonDeserializer
和JsonSerializer
类的组合。
例如:
将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));
}
}
@XmlJavaTypeAdapter
和XmlAdapter
,但序列化和反序列化在同一个适配器类中完成。 - Thomas Fritsch