Come posso acquisire tutti i parametri di query in Jersey JaxRS?


91

Sto creando un servizio web generico e ho bisogno di prendere tutti i parametri di query in una stringa per un'analisi successiva. Come posso fare questo?

Risposte:


163

È possibile accedere a un singolo parametro tramite @QueryParam("name")o a tutti i parametri tramite il contesto:

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

La chiave è l' @Context annotazione jax-rs , che può essere utilizzata per accedere:

UriInfo, Request, HttpHeaders, SecurityContext, Providers


Possiamo usare con GET?
sentirsi bene e programmare il

33

La parte di query non analizzata dell'URI della richiesta può essere ottenuta UriInfodall'oggetto:

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

4

Aggiungendo un po 'di più alla risposta accettata. È anche possibile ottenere tutti i parametri della query nel modo seguente senza aggiungere un parametro aggiuntivo al metodo che potrebbe essere utile quando si mantiene una documentazione spavalda.

@Context
private UriInfo uriInfo;

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

rif


Anche se funziona, non lo consiglierei. Se riesci a mantenere puro il codice funzionale, dovresti provarlo: è l'approccio migliore.
martyglaubitz

1
Sebbene sia strettamente corretto, sto usando questo approccio con una superclasse per registrare automaticamente i parametri e funziona molto bene. Molto più pulito che dover passare i parametri ad ogni richiesta. A volte la purezza funzionale deve guardare dall'altra parte per pochi secondi mentre la programmazione pragmatica prende il controllo della tastiera :)
Paul Russell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.