¿Cómo puedo obtener todos los parámetros de consulta en Jersey JaxRS?

91

Estoy construyendo un servicio web genérico y necesito reunir todos los parámetros de consulta en una cadena para analizarlos posteriormente. ¿Cómo puedo hacer esto?

Tom
fuente

Respuestas:

163

Puede acceder a un solo parámetro a través de @QueryParam("name")o todos los parámetros a través del contexto:

@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 clave es la @Context anotación jax-rs , que se puede utilizar para acceder a:

UriInfo, Solicitud, HttpHeaders, SecurityContext, Proveedores

hisdrewness
fuente
¿Podemos usarlo con GET?
sentirse bien y programar el
33

La parte de consulta sin analizar del URI de solicitud se puede obtener del UriInfoobjeto:

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

Añadiendo un poco más a la respuesta aceptada. También es posible obtener todos los parámetros de consulta de la siguiente manera sin agregar un parámetro adicional al método que puede ser útil al mantener la documentación de swagger.

@Context
private UriInfo uriInfo;

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

árbitro

Janak
fuente
Si bien esto funciona, no lo recomendaría. Si puede mantener el código funcional puro, debería intentarlo, es el mejor enfoque.
martyglaubitz
1
Aunque es estrictamente correcto, estoy usando este enfoque con una superclase para registrar parámetros automáticamente, y funciona muy bien. Mucho más limpio que tener que pasar los parámetros con cada solicitud. A veces, la pureza funcional solo necesita mirar para otro lado durante unos segundos mientras la programación pragmática toma el control del teclado :)
Paul Russell