Jersey 2.x向ClientConfig添加多个标头

时间:2017-07-16 01:25:07

标签: java http-headers jersey-2.0 jersey-client

我在这里看了不同的答案,他们都是在请求调用期间添加标题。我想在客户端配置中添加标头,然后将其注册到客户端本身。

我环顾四周,发现我可以创建自定义的 ClientRequestFilter ,但是查看add()方法签名,我看不到任何我可以添加多个标题的内容 - 它们都像一个字符串作为第一个参数,然后像列表一样。

例如,我想添加这些标题:

Accept: 'something'
Client-ID: 'another something'
Authorization: 'OAuth more something'

我想出了下面的代码,但似乎实际上只使用了第一个register()方法调用。我检查了调试器,我看到的是第一个接受标头和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));

2 个答案:

答案 0 :(得分:0)

我相信你可以做到:

client.target("")
             .request()
             .header("Accept","something")
             .header("Client-ID", "another something");

答案 1 :(得分:0)

我首先通过分配到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));