我正在使用Jersey:2.9.1和MOXyJsonProvider
配置如下:
@Provider
public class MOXyJsonContextResolver implements ContextResolver<MoxyJsonConfig> {
private final MoxyJsonConfig config;
public MOXyJsonContextResolver() {
config = new MoxyJsonConfig();
config.setAttributePrefix("");
config.setValueWrapper("value");
config.property(JAXBContextProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
}
@Override
public MoxyJsonConfig getContext(Class<?> objectType) {
return config;
}
}
我有一个公司类,其中包含地址集合:
@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;
...
}
问题是具有单个元素数组的编组对象无法正确解组。例如:如果我向我的网络服务询问公司对象,我会得到类似的东西:
"company" : { "addresses":[{ "city" : "Warszawa", "street" : "Testowa", "country" : "Polska"}]}
正确。但是,如果我再次将其作为参数传递给我的Web服务,那么在Web服务端我会得到一个公司有一个空数组。
对于具有多个元素的数组,一切都按预期工作。
更新
我在这里提出了问题: JAXBMarshaller and JAXBUnmarshaller are not compatible with each other
你可以找到这个的简化版本和失败的真正的jUnit测试用例。
答案 0 :(得分:0)
尝试将地址初始化为ArrayList。也定义为List,而不是Collection。
private List<Address> addresses = new ArrayList<Address>();
我们做一些非常相似的事情没有问题