5

サーバー側でJerseyを使用して次のように定義されたWebサービスがあります。

@POST
@Consumes(MediaType.APPLICATION_XML)
@Path("/foo")
public Response bar(List<Foo> listFoo) {    
 try {
        //save the resource
        } catch (Exception e) {
        log.error("Error saving", e);
        return Response.status(Status.INTERNAL_SERVER_ERROR).build();
    }
    return Response.status(Status.OK).build();
}

次のように、Jerseyクライアントでサーバーステータスを取得しようとしています。

Response response = ws.type(MediaType.APPLICATION_XML).post(Response.class,list);

しかし、エラーが発生します:

A message body reader for Java class javax.ws.rs.core.Response, and Java type class javax.ws.rs.core.Response, and MIME media type application/xml was not found javax.ws.rs.core.Response

レスポンスオブジェクトは本当に必要ありません。ステータスコードだけが必要です。どうすれば取得できますか?

4

2 に答える 2

4

わかりました。リクエストレスポンスタイプを変更して解決しました。

Response response = ws.type(MediaType.APPLICATION_XML).post(Response.class,list);

ClientResponse response = ws.type(MediaType.APPLICATION_XML).post(ClientResponse.class,list);

ClientResponseあることcom.sun.jersey.api.client.ClientResponse

于 2012-06-08T09:29:39.593 に答える
1

@ConsumesWebサービスにアノテーションを追加し、bar()メソッドにパラメータを追加します。これは、という名前のオブジェクトをそこに配置しようとしているためですlist

@POSTまた、canonical@PUTは応答を返さないため、代わりに使用することをお勧めします。

UPD。ちなみに、エンティティは空です。@Producesアノテーションを削除Responseして、ステータスを設定して戻る必要があります。

UPD2。.accept(MediaType.APPLICATION_XML)クライアント側からメソッドを削除します。

于 2012-06-08T07:49:49.740 に答える