Wie kann ich alle Abfrageparameter in Jersey JaxRS abrufen?


91

Ich erstelle einen generischen Webdienst und muss alle Abfrageparameter für eine spätere Analyse in einer Zeichenfolge zusammenfassen. Wie kann ich das machen?

Antworten:


162

Sie können @QueryParam("name")über den Kontext auf einen einzelnen Parameter oder auf alle Parameter zugreifen:

@POST
public Response postSomething(@QueryParam("name") String name, @Context UriInfo uriInfo, String content) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

Der Schlüssel ist die @Context jax-rs-Annotation , mit der auf Folgendes zugegriffen werden kann:

UriInfo, Request, HttpHeaders, SecurityContext, Providers


Können wir mit GET verwenden?
Wohlfühlen und Programmieren

33

Der nicht analysierte Abfrageteil des Anforderungs-URI kann vom UriInfoObjekt abgerufen werden:

@GET
public Representation get(@Context UriInfo uriInfo) {
  String query = uriInfo.getRequestUri().getQuery();
  ...
}

4

Der akzeptierten Antwort etwas mehr hinzufügen. Es ist auch möglich, alle Abfrageparameter auf folgende Weise abzurufen, ohne der Methode einen zusätzlichen Parameter hinzuzufügen, was bei der Pflege der Swagger-Dokumentation hilfreich sein kann.

@Context
private UriInfo uriInfo;

@POST
public Response postSomething(@QueryParam("name") String name) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

ref


Während dies funktioniert, würde ich es nicht empfehlen. Wenn Sie den Code funktionsfähig halten können, sollten Sie es versuchen - es ist der bessere Ansatz.
Martyglaubitz

1
Obwohl streng korrekt, verwende ich diesen Ansatz mit einer Superklasse, um Parameter automatisch zu protokollieren, und er funktioniert sehr gut. Viel sauberer, als die Parameter bei jeder Anfrage übergeben zu müssen. Manchmal muss die funktionale Reinheit nur ein paar Sekunden lang wegschauen, während die pragmatische Programmierung die Kontrolle über die Tastatur übernimmt :)
Paul Russell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.