我正在使用JAXB将类映射到JSON(使用genson)。我想将某些类型嵌入为纯字符串,例如:
@XmlRootElement
class Request {
private LocalDateTime receivedAt;
}
映射到哪个
{
"receivedAt":{
"dayOfMonth":21,
"dayOfWeek":"WEDNESDAY",
"dayOfYear":21,
"hour":12,
"minute":33,
"month":"JANUARY",
"monthValue":1,
"nano":110000000,
"second":51,
"year":2015
}
}
我宁愿让它看起来像
{
"receivedAt":"2015-01-21T12:33:51+00:00"
}
即在条目值上使用toString()
。这可能吗?
窍是创建一个XmlAdapter
类,帮助Jaxb转换LocalDateTime 到字符串,从字符串返回到 LocalDateTime。
像这样:
public class LocalDateTimeXmlAdapter extends XmlAdapter<String, LocalDateTime> {
@Override
public String marshal(LocalDateTime arg0) throws Exception {
return arg0.toString();
}
@Override
public LocalDateTime unmarshal(String arg0) throws Exception {
return new LocalDateTime(arg0);
}
}
然后,要么用@XmlJavaTypeAdapter
批注你的字段,要么批注你的整个包(如果你希望它应用于任何序列化的 LocalDateTime 字段),以便 JaxB 实例化你的 XmlAdapter,每当它找到要封送(或取消封送)的 LocaleDateTime 时,它就会调用你的 XmlAdapater 的适当方法。
如果您放在包级别:
@XmlJavaTypeAdapters(
@XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class)
)
如果你把它放在你的田地上:
@XmlJavaTypeAdapter(value=LocalDateTimeXmlAdapter.class)
private LocalDateTime receivedAt;
另请参阅此链接以获取更多示例