我正在尝试为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();
使用
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
this.client = ProxyFactory.create(RestClient.class, "http://localhost:8080/essc-portal/rest");
但客户抛出:
引起:javax.xml.bind.UnmarshalException - 链接例外:
[com.sun.istack.SAXParseException2; columnNumber:0;意外元素(uri:“”,local:“id”)。预期元素为&lt; {} product&gt;]
我试图添加
@XmlElementWrapper(name="product")
或
@XmlElement(type = Product.class, name = "product")
或
@org.jboss.resteasy.annotations.providers.jaxb.Wrapped(element = "product")
但两者都没有帮助。
我该如何解决这个问题?我不想创建额外的bean类。
答案 0 :(得分:0)
RestEasy客户期望的是:
[{"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;
}