Java 在Jersey中处理多个查询参数
在我正在使用的web服务中,我需要实现一个URI,该URI带有类似于Java 在Jersey中处理多个查询参数,java,rest,path,jersey,Java,Rest,Path,Jersey,在我正在使用的web服务中,我需要实现一个URI,该URI带有类似于/stats?store=a&store=B&item=C&item=D 要分解它,我需要能够使用查询参数来指定来自多个/所有存储的数据以及来自这些存储的多个/所有项目的数据。到目前为止,为了提取项数据,我已经能够实现一个查询参数,但我对如何实现更多查询一无所知,似乎找不到以前见过的处理此实现的资源 到目前为止,我的方法是按照 @GET @Path("stats") public String methodImCalling(@
/stats?store=a&store=B&item=C&item=D
要分解它,我需要能够使用查询参数来指定来自多个/所有存储的数据以及来自这些存储的多个/所有项目的数据。到目前为止,为了提取项数据,我已经能够实现一个查询参数,但我对如何实现更多查询一无所知,似乎找不到以前见过的处理此实现的资源
到目前为止,我的方法是按照
@GET
@Path("stats")
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final String item)
{
/**Run data using item as variable**/
return someStringOfData
}
这对一个项目很有效,如果我不在URI中键入参数,它将返回所有数据。但是,我不确定如何处理更多的参数
更新:
通过向方法中添加第二个参数,我已经了解了如何使用两个不同的参数,如下所示:
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store,
@DefaultValue("All") @QueryParam(value = "item") final String item)
问题仍然是如何实现同一参数的多个值。如果将
项
方法参数的类型从字符串
更改为一个集合,如列表
,则应该得到一个包含所有要查找的值的集合
@GET
@Path("/foo")
@Produces("text/plain")
public String methodImCalling(@DefaultValue("All")
@QueryParam(value = "item")
final List<String> item) {
return "values are " + item;
}
@GET
@路径(“/foo”)
@生成(“文本/纯文本”)
公共字符串methodImCalling(@DefaultValue(“全部”)
@查询参数(value=“item”)
最后清单项目){
返回“值为”+项;
}
JAX-RS规范(第3.2节)对@QueryParam
注释作了如下说明:
支持以下类型:
字符串参数的构造函数的类型
valueOf
的静态方法以及单个String
参数的类型列表
,集合
,或分类集
,其中T
满足上述2或3项要求List items=ui.getQueryParameters().get(“item”)代码>
其中,ui
声明为rest资源中的成员,如下所示:
@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) {
...
}
公共字符串方法调用(
@QueryParam(value=“store”)最终列表存储,
@QueryParam(value=“store[]”)带括号的最终列表存储,
@QueryParam(value=“item”)最终列表项,
@QueryParam(value=“item[]”)最终列表项(带括号){
...
}
检查每个参数是否为null。但定义列表不起作用。我想ArrayList也会起到同样的作用?列表项
不起作用,ArrayList项
刚刚破坏了我的代码。。。还有其他建议吗?@ZKSteffel:我不知道为什么它不起作用,因为我做了一个快速测试,它对我很有效。我将编辑我的答案以显示我使用的完整方法。你能给我更多关于失败的信息吗?结果是我从错误的包中导入了列表,我的代码开始出错。现在对我有用了。谢谢你的帮助@Teivere:www.myurl.com/foo?item=listitem1&item=listitem2将是@谢谢。