使用 JAXB 映射使用 toString 的元素
Using JAXB to map elements using toString
我正在使用 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
class 来帮助 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;
另请参阅此 link for more examples
我正在使用 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
class 来帮助 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;
另请参阅此 link for more examples