REST - 从响应中获取资源URI(NOT ClientResponse)

时间:2012-07-17 10:28:03

标签: java rest jersey cxf resteasy

如何从Response.class中获取资源URI路径/位置?当我使用Apache CXF客户端API调用我的restful服务时:

 Response res = resource.post(object);

我回来了JAX-RS Response类型。 CXF并不像Jersey或RestEasy那样自己实现Response。那么如何从Response.class中获取我创建对象的URI?

在泽西岛,我正在处理ClientResponse.class。在那里我可以用:

处理
 res.getLocation(); 

RestEasy也有ClientResponse.class,我可以处理像泽西那样的问题。

1 个答案:

答案 0 :(得分: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");

(如果这不起作用,则打印元数据内容。也许密钥有另一个名称。)