2017-07-16 5 views
0

Ich habe verschiedene Antworten auf hier angesehen und sie sind alle über das Hinzufügen von Header (s) während einer Anfrage aufrufen. Ich möchte Header in der Client-Konfiguration hinzufügen und dann mit dem Client selbst registrieren.Jersey 2.x hinzufügen mehrere Header zu ClientConfig

Ich habe umsah und fand, dass ich ClientRequestFilter eine benutzerdefinierte erstellen, aber an den add() Methodensignaturen suchen, ich sehe nicht, in dem ich mehrere Header hinzufügen können - sie alle wie eine Kette nehmen, wie das erste Argument, dann wie eine Liste.

Zum Beispiel würde Ich mag diese Header hinzufügen:

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

ich mit dem Code unten kam, aber es scheint nur der erste register() Methodenaufruf tatsächlich verwendet wird. Ich überprüfte den Debugger und alles, was ich sehe, ist der erste Accept Header und die User-Agent-Header von Jersey hinzugefügt.

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

Antwort

0

ich in der Lage war, es zu erhalten, indem die Zuordnung zu einem MultivalueMap zuerst zu arbeiten, dann add() aufrufen.

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

Ich glaube, Sie tun können:

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

Ja, wie ich schon sagte, ich weiß, dass Sie solche Header hinzufügen können. Aber ich muss verschiedene Aufrufe machen, die einen anderen 'Pfad (" asdf ") verwenden, und von dem, was ich sagen kann, wenn Sie die Header setzen, können Sie den Pfad nicht ändern - ohne zuerst' target() 'aufzurufen. Was bedeutet, dass ich 'header()' und 'path()' auf irgendeine Weise wiederholt aufrufen müsste ... – itsbavu