RestEasy客户端:如何包装列表元素?

RestEasy客户端:如何包装列表元素?,rest,jaxb,client,resteasy,Rest,Jaxb,Client,Resteasy,我正在尝试为RestEasy REST服务创建RestEasy客户端,提供以下实体: @SuppressWarnings("serial") @Entity @Table(name="product") @XmlRootElement(name="product") public class Product implements Serializable, IHasTraits { @Id @GeneratedValue(strategy = GenerationType.IDENTI

我正在尝试为RestEasy REST服务创建RestEasy客户端,提供以下实体:

@SuppressWarnings("serial")
@Entity @Table(name="product")
@XmlRootElement(name="product")
public class Product implements Serializable, IHasTraits {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(columnDefinition = "INT UNSIGNED")
    private Long id;
结果是

[{"id":1,"name":"FOO","note":null,...}]
然后我试着通过一个接口来阅读它。 我希望可以使用相同的模型类

@Path("/")
public interface RestClient {

    @GET
    @Path("/products")
    @Produces("application/json")
    public List<Product> getProducts();
但客户提出:

原因:javax.xml.bind.UnmarshalException -有链接的例外情况:
[com.sun.istack.SAXParseException2;列号:0;意外元素(uri:,local:“id”)。预期元素为]

我试着补充一下

@XmlElementWrapper(name="product")

但两者都没有帮助


我应该如何解决这个问题?我不希望创建额外的bean类。

RestEasy客户端希望:

  [{"product":{"id":1,"name":"EAP","note":null,"extIdJira":null,"extIdBugzilla":"226"}]
不是

所以我最终改变了制作方法:

public List<ProductWrapper> getProducts( @Context SecurityContext sc ) {
    final List<Product> prods = daoProd.getProducts_orderName(0);
    return rewrap(prods);
}
public List getProducts(@Context SecurityContext sc){
最终列表prods=daoProd.getProducts\u orderName(0);
返回重新记录(prods);
}

私有列表重写(列表产品){
列表p2=新的ArrayList(prods.size());
用于(产品:prods){
p2.增加(新产品包装(产品));
}
返回p2;
}
@org.jboss.resteasy.annotations.providers.jaxb.Wrapped(element = "product")
  [{"product":{"id":1,"name":"EAP","note":null,"extIdJira":null,"extIdBugzilla":"226"}]
  {"products":[{"id":1,"name":"EAP","note":null,"extIdJira":null,"extIdBugzilla":"226"}]}
public List<ProductWrapper> getProducts( @Context SecurityContext sc ) {
    final List<Product> prods = daoProd.getProducts_orderName(0);
    return rewrap(prods);
}
private List<ProductWrapper> rewrap(List<Product> prods) {
    List<ProductWrapper> p2 = new ArrayList(prods.size());
    for( Product product : prods){
        p2.add( new ProductWrapper(product));
    }
    return p2;
}