usar definicion codigo java rest path jersey

java - definicion - Manejo de múltiples parámetros de consulta en Jersey



jlabel definicion (3)

En el servicio web en el que estoy trabajando, necesito implementar un URI con parámetros de consulta que se vean como /stats?store=A&store=B&item=C&item=D

Para desglosarlo, necesito poder usar parámetros de consulta para especificar datos de múltiples / todas las tiendas y datos para múltiples / todos los artículos de esas tiendas. Hasta ahora he podido implementar un solo argumento de consulta para extraer los datos del artículo, pero estoy perdido en cuanto a cómo implementar más consultas, y parece que no puedo encontrar los recursos que había visto antes de qué trato con esta implementación.

Lo que tengo hasta ahora en mi método es a lo largo de las líneas de

@GET @Path("stats") public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final String item) { /**Run data using item as variable**/ return someStringOfData }

que funciona bien para un elemento, y devolverá todos los datos si no escribo el parámetro en el URI. Sin embargo, no estoy seguro de cómo manejar más parámetros que este.

Actualización :

He descubierto cómo usar 2 parámetros diferentes simplemente agregando un segundo argumento al método de esta manera:

public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store, @DefaultValue("All") @QueryParam(value = "item") final String item)

Queda la pregunta de cómo implementar múltiples valores del mismo parámetro.


Algunas bibliotecas como axios js usan la notación de corchetes cuando se envía una solicitud de param multivalor: / stats? Store [] = A & store [] = B & item [] = C & item [] = D

Para manejar todos los casos (con o sin corchetes), puede agregar otro parámetro como este:

public String methodImCalling( @QueryParam(value = "store") final List<String> store, @QueryParam(value = "store[]") final List<String> storeWithBrackets, @QueryParam(value = "item") final List<String> item, @QueryParam(value = "item[]") final List<String> itemWithBrackets) { ... }

Inspeccionando cada uno de los argumentos buscando nulo.


Si cambia el tipo de parámetro del método de su item de String a una colección como List<String> , debe obtener una colección que contenga todos los valores que está buscando.

@GET @Path("/foo") @Produces("text/plain") public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final List<String> item) { return "values are " + item; }

La especificación JAX-RS (sección 3.2) dice lo siguiente con respecto a la anotación @QueryParam :

Los siguientes tipos son compatibles:
  1. Tipos primitivos
  2. Tipos que tienen un constructor que acepta un solo argumento de String .
  3. Tipos que tienen un método estático llamado valueOf con un único argumento de String .
  4. List<T> , Set<T> , o SortedSet<T> donde T satisface 2 o 3 arriba.

List<String> items=ui.getQueryParameters().get("item");

donde ui se declara como miembro en el recurso de resto como tal:

@Context UriInfo ui;

el inconveniente es que no aparece en absoluto en los argumentos de métodos.