2017-11-08 4 views
0

Ich habe den folgenden CodeJAVA - Get HTTP-Request-Header

String jsonText = "some_text_in_json_format"; 
WebTarget target = "some_url/id" 
Response response = target.resolveTemplate("id", id).queryParam("overwrite", false).request(MediaType.APPLICATION_JSON) 
       .header("Authorization", "Basic " + authInfo).put(Entity.json(jsonText)); 

Ich brauche die Request-Header abzurufen. Ich weiß, wie man sie bekommt, wenn ich ein HttpServletRequest-Objekt hatte.

HINZUFÜGEN: Enthält die Anforderung neben dem explizit bereitgestellten Autorisierungsheader zusätzliche Header?

Aber in diesem Fall habe ich keine Methoden (in den WebTarget oder Invocation.Builder-Schnittstellen) gefunden, um mein Ziel zu adressieren.

Irgendwelche Tipps?

Danke!

+0

vermutlich haben Sie auch einen Client? Sie können ClientResponseContext davon abrufen und die Header von dort aus behandeln. – David

+0

@David Der Code bezieht sich auf die Client-Anwendung. Gibt es andere Header, die implizit zu einer Anfrage hinzugefügt werden, zusätzlich zur Authentifizierung? Ich kann nur den Code debuggen, da er nicht von mir ist. Also muss ich genau wissen, welche Art von Anfrage an den Server gesendet wird (was nicht überprüft werden kann). – Fab

+0

@Fab Bitte sehen Sie meine aktualisierte [Antwort] (https://Stackoverflow.com/a/47183662/1426227). –

Antwort

0

Zusätzlich zu dem Header Authorization, der explizit bereitgestellt wird, enthält die Anforderung zusätzliche Header?

Ja.

  • Host: <host>:<port>
  • Accepts: application/json
  • Content-Type: application/json

Sie ein ClientRequestFilter verwenden kann, um: Für den Code in Frage gestellt, zumindest die folgenden Header werden zu Ihrer Anfrage hinzugefügt werden Holen Sie sich die Header aus der Anfrage:

public class MyClientRequestFilter implements ClientRequestFilter { 

    @Override 
    public void filter(ClientRequestContext requestContext) throws IOException { 

     MultivaluedMap<String, Object> headers = requestContext.getHeaders(); 
     ... 

    } 
} 

dann die Filter in Ihrer Client-Instanz registrieren:

Client client = ClientBuilder.newClient().register(MyClientRequestFilter.class);