4

我正在尝试接收任意一组 HTTP 标头并将其转储到 WebResource 实例中。WebResource 接口允许使用查询参数来执行此操作,因为它提供了

        webResource.queryParam(key, value)

        webResource.queryParams(MultivaluedMap<String, String> queryMap)

然而,API 不允许对标头执行相同的操作。只有一个功能,

            webResource.header(key, value)

它允许为 HTTP 标头输入键值对,但没有功能

 webResource.headers(MultivaluedMap<String, String> headersMap)

为了解决这个问题,我尝试从 WebResource 检索构建器并对其进行迭代,一一添加标题

        WebResource.Builder builder = webResource.getRequestBuilder();
    for(Map.Entry<String, String> headersMapEntry : headersMap.entrySet()){
        builder = builder.header(
                       headersMapEntry.getKey(), headersMapEntry.getValue());
    }

但这似乎并不能解决我的问题。

有谁知道我如何使用 Jersey 解决方法,以便我可以将任意地图转储到我的 WebResource 的标题中?

谢谢,大卫

4

3 回答 3

5

事实证明,解决它的唯一方法是首先使用 getRequestBuilder() 从 webResource 中提取 requestBuilder,然后使用 requestBuilder 构建并执行请求的其余部分。

于 2011-08-22T20:48:02.507 回答
1

这篇文章通过示例更彻底地解释了这个问题和解决方案:http: //juristr.com/blog/2015/05/jersey-webresource-ignores-headers/

于 2015-08-12T11:17:18.537 回答
0

因为如果您检索 RequestBuilder 或 PartialRequestBuilder 就无法触发实际请求,您必须检索:

WebResource.Builder builder = webResource.getRequestBuilder();

WebResource.Builder 有 get、post 等:

response = builder.post(ClientResponse.class, body);
于 2014-12-11T09:15:25.590 回答