我有一个简单的 Web 服务,它使用和生成一些 XML 和 JSON 格式的 bean。然后我有一个包含对象集合的 bean:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {
@XmlElementWrapper(name = "addresses")
@XmlElement(name = "address")
private Collection<Address> addresses;
...
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Address{
private String street;
private String city;
private String country;
...
}
序列化后我有这个 XML:
<company>
<addresses>
<address>
<street>Testowa 1A</street>
<city>Warszawa</city>
<country>Polska</country>
</address>
<address>
<street>Testowa 2A</street>
<city>Warszawa</city>
<country>Polska</country>
</address>
</addresses>
</company>
哪个是正确的,JSON:
"company" : {
"addresses": {
"address": [ {"street": "Testowa 1A", "city": "Warszawa", "country": "Polska"} ],
"address": [ {"street": "Testowa 2A", "city": "Warszawa", "country": "Polska"} ]
}
}
问题出在 JSON 上。我的网络服务用户无法接受序列化集合的符号。他们需要这样的东西:
"company" : {
"addresses": [
{"street": "Testowa 1A", "city": "Warszawa", "country": "Polska"},
{"street": "Testowa 2A", "city": "Warszawa", "country": "Polska"}
]
}
如果我删除 @XmlElementWrapper
我将拥有我需要的 JSON,但我的 XML 将不正确(没有“地址”标签):
<company>
<address>
<street>Testowa 1A</street>
<city>Warszawa</city>
<country>Polska</country>
</address>
<address>
<street>Testowa 2A</street>
<city>Warszawa</city>
<country>Polska</country>
</address>
</company>
知道如何满足这两个要求吗?
最佳答案
JAXB (JSR-222)本身不包括如何将对象转换为 JSON 或从 JSON 转换为对象。这意味着答案将取决于您正在使用的当前解释 JAXB 注释的 JSON 绑定(bind)实现。
在EclipseLink JAXB (MOXy)我们提供 JSON 绑定(bind)一个名为 JSON_WRAPPER_AS_ARRAY_NAME
的运行时属性,它可以实现您正在寻找的行为。
关于java - 将对象集合序列化为 JSON 和 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24865758/