如何解决在Jersey中处理多个查询参数
| 在我正在使用的Web服务中,我需要使用查询参数来实现URI,该参数看起来像是“ 0” 要对其进行分解,我需要能够使用查询参数来指定多个/所有商店中的数据以及这些商店中多个/所有项目的数据。到目前为止,我已经能够很好地实现一个查询参数以便提取项目数据,但是我对如何实现更多查询一无所知,而且似乎找不到以前见过的资源。处理此实现。 到目前为止,我所采用的方法是@GET
@Path(\"stats\")
public String methodImCalling(@DefaultValue(\"All\") @QueryParam(value = \"item\") final String item)
{
/**Run data using item as variable**/
return someStringOfData
}
这对于一项很有效,如果我不在URI中键入参数,它将返回所有数据。但是,我不确定如何处理比这更多的参数。
更新:
我已经通过简单地向方法添加第二个参数来弄清楚如何使用2个不同的参数,如下所示:
public String methodImCalling(@DefaultValue(\"All\") @QueryParam(value = \"store\") final String store,@DefaultValue(\"All\") @QueryParam(value = \"item\") final String item)
问题仍然在于如何实现同一参数的多个值。
解决方法
如果将
item
方法参数的类型从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
注释规定如下:
支持以下类型:
基本类型
具有接受单个String
参数的构造函数的类型。
具有名为valueOf
且带有单个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) {
...
}
检查每个参数是否为空。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。