Jersey 2.x 添加多个 headers 到 ClientConfig

Jersey 2.x add multiple headers to ClientConfig

我在这里查看了不同的答案,它们都是关于在请求调用期间添加 header(s) 的。我想在客户端配置中添加 headers 然后在客户端本身注册它。

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

例如,我想添加这些header:

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

我想出了下面的代码,但似乎只实际使用了第一个 register() 方法调用。我检查了调试器,我看到的只是第一个 Accept header 和 Jersey 添加的 User-Agent header。

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));

我相信你能做到:

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

我能够通过先分配给 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));