¿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?

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


¿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();
  ...
}

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.