【发布时间】:2011-07-21 15:51:04
【问题描述】:
我正在尝试接收任意一组 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 的标题中?
谢谢, 大卫
【问题讨论】:
-
如何迭代地图并单独设置标题不能解决问题?
-
嘿克里斯托弗,你的问题正是我为什么这么难过。我使用上面的代码或“webResource.getRequestBuilder().header(key, value);”手动迭代或者它没有正确设置标头(我检查在 Wireshark 上发送的传出数据包),Jersey 源代码中的 getRequestBuilder() 仅仅是“返回新的 Builder()”,这让人怀疑这样做,但是如果您检查所有其他返回 Builder 的函数(cookie()、实体、...),它们也会使用 getRequestBuilder()。
标签: java rest jersey webresource