0

このエンティティを提供して、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; 列番号: 0; 予期しない要素 (uri:""、local:"id")。期待される要素は <{}product>] です

追加してみました

@XmlElementWrapper(name="product")

また

@XmlElement(type = Product.class, name = "product")

また

@org.jboss.resteasy.annotations.providers.jaxb.Wrapped(element = "product")

しかし、どちらも役に立ちませんでした。

これをどのように解決すればよいですか?追加の Bean クラスを作成したくありません。

4

1 に答える 1

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;
}
于 2013-02-08T11:00:00.423 に答える