我正在使用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()
。这可能吗?
答案 0 :(得分:1)
诀窍是创建一个XmlAdapter
类来帮助Jaxb转换a
LocalDateTime到String并从String返回到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进行编组时(或unmarshal),它将调用XmlAdapater的相应方法。
如果你加入包级别:
@XmlJavaTypeAdapters(
@XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class)
)
如果你把它放在你的领域:
@XmlJavaTypeAdapter(value=LocalDateTimeXmlAdapter.class)
private LocalDateTime receivedAt;