gpt4 book ai didi

java - 使用 JAXB 使用 toString 映射元素

转载 作者:行者123 更新时间:2023-12-01 11:59:41 25 4
gpt4 key购买 nike

我正在使用 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 来编码(或解码),它将调用 XmlAdapter 的适当方法。

如果放在包级别:

@XmlJavaTypeAdapters(
@XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class)
)

如果你把它放在你的 field 上:

@XmlJavaTypeAdapter(value=LocalDateTimeXmlAdapter.class)
private LocalDateTime receivedAt;

另请参阅 link for more examples

关于java - 使用 JAXB 使用 toString 映射元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com