处理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:
- 原始types
- 具有接受单个
String
参数的构造函数的types。- 具有名为
valueOf
的静态方法的types,带有一个String
参数。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的参数。