Jersey 2.x将多个标头添加到ClientConfig
问题描述:
我在这里查看了不同的答案,它们都是关于在请求调用期间添加标头的。我想在客户端配置中添加标题,然后将其注册到客户端本身。Jersey 2.x将多个标头添加到ClientConfig
我环顾四周,发现我可以创建自定义ClientRequestFilter,但看add()
方法签名,我看不出有什么我在其中可以添加多个标题 - 他们都需要像一个字符串作为第一个参数,然后就像一个列表。
例如,我想补充这些标题:
Accept: 'something'
Client-ID: 'another something'
Authorization: 'OAuth more something'
我想出了下面的代码,但似乎只有第一register()
方法调用实际使用。我检查了调试器,我看到的是第一个Accept标头和由Jersey添加的User-Agent标头。
public OAuth2Authenticator(String header, String value) {
this.header = header;
this.value = value;
}
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
requestContext.getHeaders().add(header, value);
}
...
client = ClientBuilder.newClient(new ClientConfig());
client.register(new OAuth2Authenticator(HttpHeaders.ACCEPT, API_VERSION))
.register(new OAuth2Authenticator("Client-ID", clientId))
.register(new OAuth2Authenticator(HttpHeaders.AUTHORIZATION, "OAuth " + accessToken));
答
我能得到它分配给一个MultivalueMap第一,然后调用add()
工作。
MultivaluedMap<String, Object> headers = requestContext.getHeaders();
headers.add(HttpHeaders.ACCEPT, "something");
headers.add("Client-ID", another something);
headers.add(HttpHeaders.AUTHORIZATION, "OAuth more something");
...
client = ClientBuilder.newClient(new ClientConfig());
client.register(new OAuth2Authenticator(API_VERSION, clientId, accessToken));
答
我相信你能做到:
client.target("")
.request()
.header("Accept","something")
.header("Client-ID", "another something");
是的,正如我所说的,我知道你可以添加这样的标题。但是我需要做不同的调用,使用不同的'path(“asdf”)',并且据我所知,一旦设置了标题,就不能改变路径 - 不要再次调用'target()'。这意味着我必须以某种方式重复调用'header()'和'path()'... – itsbavu