it-swarm.com.de

Wie kann ich alle Abfrageparameter in Jersey JaxRS erfassen?

Ich baue einen generischen Webdienst und muss alle Abfrageparameter für eine spätere Analyse in einen String packen. Wie kann ich das machen?

85
Tom

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

@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 @Contextjax-rs Annotation , auf die zugegriffen werden kann:

UriInfo, Request, HttpHeaders, SecurityContext, Anbieter

150
hisdrewness

Der nicht geparste Abfrageteil des Anforderungs-URIs kann vom UriInfo-Objekt abgerufen werden:

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

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, der bei der Verwaltung der Swagger-Dokumentation nützlich 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

1
Janak