4

現在、Jersey をプロキシ REST API として使用して、別の RESTful Web サービスを呼び出しています。一部の呼び出しは、サーバーでの最小限の処理で送受信されます。

これをきれいに行う方法はありますか?Jersey Client を使用して REST 呼び出しを行い、ClientResponse を Response に変換することを考えていました。これは可能ですか、それとももっと良い方法がありますか?

いくつかのコード例:

@GET
@Path("/groups/{ownerID}")
@Produces("application/xml")
public String getDomainGroups(@PathParam("ownerID") String ownerID) {
    WebResource r = client.resource(URL_BASE + "/" + URL_GET_GROUPS + "/" + ownerID);
    String resp = r.get(String.class);
    return resp;
}

これは、応答が常に成功する場合に機能しますが、他のサーバーに 404 がある場合は、応答コードを確認する必要があります。言い換えれば、私が得た応答を返すためのきれいな方法はありますか?

4

2 に答える 2

8

私の知る限り、便利な方法はありません。あなたはこれを行うことができます:

public Response getDomainGroups(@PathParam("ownerID") String ownerID) {
    WebResource r = client.resource(URL_BASE + "/" + URL_GET_GROUPS + "/" + ownerID);
    ClientResponse resp = r.get(ClientResponse.class);
    return clientResponseToResponse(resp);
}

public static Response clientResponseToResponse(ClientResponse r) {
    // copy the status code
    ResponseBuilder rb = Response.status(r.getStatus());
    // copy all the headers
    for (Entry<String, List<String>> entry : r.getHeaders().entrySet()) {
        for (String value : entry.getValue()) {
            rb.header(entry.getKey(), value);
        }
    }
    // copy the entity
    rb.entity(r.getEntityInputStream());
    // return the response
    return rb.build();
}
于 2012-06-08T09:41:50.007 に答える
2

Martin throw からの私の回答: JsonMappingException: No serializer found for class sun.net.www.protocol.http.HttpURLConnection$HttpInputStream からの変更

rb.entity(r.getEntityInputStream());

rb.entity(r.getEntity(new GenericType<String>(){}));

助けた。

于 2013-09-19T21:59:06.177 に答える