JSON解组单元素数组

时间:2014-07-22 08:59:48

标签: java json jaxb jersey

我正在使用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测试用例。

1 个答案:

答案 0 :(得分:0)

尝试将地址初始化为ArrayList。也定义为List,而不是Collection。

private List<Address> addresses = new ArrayList<Address>();

我们做一些非常相似的事情没有问题