RestEasy客户端:如何包装列表元素?
我正在尝试为RestEasy REST服务创建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
@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;
}