REST,JAXB,jersey 2,JSON,List<>类型的字段

时间:2013-08-08 20:39:47

标签: json rest jaxb jersey

我有一些RESTful服务和一些方法。方法由@POST@Consumes(MediaType.APPLICATION_JSON)注释。

我有请求参数的包装器:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class RequestWrapper {

    @XmlElement
    private SomeInfo someInfo = new SomeInfo();

    @XmlElement
    @XmlElementWrapper
    private List<RequestParameter> requestParameters = new ArrayList<>();
}

public class SomeInfo {
    public String field1;
    public String field2;
}

public class RequestParameter {
    public String key;
    public String value;
}

我向我的服务提出请求。 POST消息正文:

{"someInfo":{"field1":"b","field2":"c"},"requestParameters":[{"key":"1","value":"2"},{"key":"3","value":"4"}]}

我看到someInfo值已通过RequestWrapper处理和访问。但是List<RequestParameter> requestParameters的长度为零。

我应该如何正常处理邮件?

P.S。 我使用Glassfish 4.0。 maven模块的依赖关系:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-processing</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

1 个答案:

答案 0 :(得分:2)

omg,我找到了魔术弹

删除@XmlAccessorType(XmlAccessType.FIELD)

删除@XmlElementWrapper

为每个字段制作公共getter / setter

@XmlRootElement
public class RequestWrapper {
    @XmlElement
    private SomeInfo someInfo = new SomeInfo();
    @XmlElement
    private List<RequestParameter> requestParameters = new ArrayList<>();

    // getters/setters for each field
}