1

Response.class からリソース URI パス/場所を取得する方法は? 次のように、Apache CXF クライアント API を使用して RESTful サービスを呼び出すと、次のようになります。

 Response res = resource.post(object);

JAX-RS 応答タイプを取得します。CXF は、Jersey や RestEasy のように Response を独自に実装していません。では、オブジェクトを作成した URI を Response.class から取得するにはどうすればよいでしょうか?

ジャージーでは、ClientResponse.class を扱っています。そこで私はこれを処理できます:

 res.getLocation(); 

RestEasy にも ClientResponse.class があり、ジャージのように問題を処理できます。

4

1 に答える 1

4

Jersey ClientResponse はLocationヘッダーから取得します:

/**
 * Get the location.
 *
 * @return the location, otherwise <code>null</code> if not present.
 */
public URI getLocation() {
    String l = getHeaders().getFirst("Location");
    return (l != null) ? URI.create(l) : null;
}

JAX-RS 応答は、以下を介してヘッダー情報を提供しますgetMetadata()

public MultivaluedMap<String, Object> getMetadata() {
    if (headers != null)
        return headers;

    headers = new OutBoundHeaders();

    for (int i = 0; i < values.length; i++)
        if (values[i] != null)
            headers.putSingle(ResponseBuilderHeaders.getNameFromId(i), values[i]);

    Iterator i = nameValuePairs.iterator();
    while (i.hasNext()) {
        headers.add((String)i.next(), i.next());
    }

    return headers;
}

だから私が試みることは次のとおりです:

response.getMetadata().getFirst("Location");

(それがうまくいかない場合は、メタデータの内容を出力してください。キーに別の名前が付いている可能性があります。)

于 2012-07-17T11:01:12.737 に答える