处理Jersey中的多个查询参数

在我正在处理的Web服务中,我需要实现一个URI查询参数,类似于/stats?store=A&store=B&item=C&item=D

要分解它,我需要能够使用查询参数来指定来自多个/所有商店的数据以及来自这些商店的多个/所有项目的数据。 到目前为止,我已经能够实现一个查询参数,以拉动项目数据,但是我失去了如何实现更多的查询,似乎无法find我之前见过的资源与此实现。

到目前为止,我的方法是沿着

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

这对于一个项目来说工作得很好,如果我不在URI中input参数,它将返回所有的数据。 但是,我不确定如何处理更多的参数。

更新

我已经想通过简单地向方法添加第二个参数如何使用2个不同的参数,如下所示:

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

问题仍然是如何实现同一个参数的多个值。

如果将item方法参数的types从String更改为List<String>的集合,则应该得到一个包含所有正在查找的值的集合。

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

JAX-RS规范(3.2节)说明了@QueryParam注释的以下内容:

支持以下types:

  1. 原始types
  2. 具有接受单个String参数的构造函数的types。
  3. 具有名为valueOf的静态方法的types,带有一个String参数。
  4. List<T>Set<T>SortedSet<T>其中T满足上面的2或3。

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

其中ui在其他资源中声明为成员,如下所示:

 @Context UriInfo ui; 

缺点是它不会出现在方法参数中。

在发送多值参数请求时,像axios js这样的一些库使用方括号表示法:/ stats?store [] = A&store [] = B&item [] = C&item [] = D

要处理所有的情况(有或没有方括号),你可以添加一个像这样的参数:

 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) { ... } 

检查每个检查null的参数。