2017-07-16 5 views
0

私はここでさまざまな答えを見てきました。私は、クライアントの設定でヘッダーを追加し、それをクライアント自体に登録したいと思います。Jersey 2.xはClientConfigに複数のヘッダを追加します

私は周りを見回したと私はカスタム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

私はそれがadd()を呼び出し、その後、最初のMultivalueMapに割り当てることで、仕事を得ることができました。

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

私はあなたがすることができると信じて:

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

はい、私が述べたように、あなたはそのようなヘッダーを追加できます。しかし、別の 'path(" asdf ")'を使用する別の呼び出しを行う必要があります。そして、あなたがヘッダを設定すると、まず 'target()'を最初に呼び出さずにパスを変更することができます。つまり、何らかの方法で 'header()'と 'path()'を繰り返し呼び出さなければならないということです。 – itsbavu

関連する問題