我在这里看了不同的答案,他们都是在请求调用期间添加标题。我想在客户端配置中添加标头,然后将其注册到客户端本身。
我环顾四周,发现我可以创建自定义的 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));
答案 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));