在 Jersey 中处理多个查询参数
在我正在开发的 Web 服务中,我需要实现一个带有查询参数的 URI,其类似于 /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 中键入参数,则将返回所有数据。但是,我不确定如何处理比这更多的参数。
更新:
我已经弄清楚如何通过简单地向方法添加第二个参数来使用2个不同的参数,如下所示:
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store,
@DefaultValue("All") @QueryParam(value = "item") final String item)
问题仍然是如何实现同一参数的多个值。
In the web service I'm working on, I need to implement a URI with query parameters which look like /stats?store=A&store=B&item=C&item=D
To break it down, I need to be able to use query parameters to specify data from multiple/all stores and data for multiple/all items from those stores. So far I have been able to implement one query argument just fine in order to pull item data, but I'm lost as far as to how to implement more queries, and can't seem to find the resources I had seen before which deal with this implementation.
What I have so far in my method is along the lines of
@GET
@Path("stats")
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final String item)
{
/**Run data using item as variable**/
return someStringOfData
}
which works well for one item, and will return all data if I don't type the parameter in the URI. However, I am unsure how to handle any more parameters than this.
Update:
I have figured out how to use 2 different parameters by simply adding a second argument to the method like so:
public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store,
@DefaultValue("All") @QueryParam(value = "item") final String item)
The question remains of how to implement multiple values of the same parameter.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果将
item
方法参数的类型从String
更改为List
等集合,您应该得到一个包含以下内容的集合:您正在寻找的所有值。JAX-RS 规范(第 3.2 节)对
@QueryParam
注释进行了如下规定:If you change the type of your
item
method parameter fromString
to a collection such asList<String>
, you should get a collection that holds all the values you are looking for.The JAX-RS specification (section 3.2) says the following regarding the
@QueryParam
annotation:列表<字符串> items=ui.getQueryParameters().get("item");
其中
ui
被声明为其余资源中的成员,如下所示:缺点是它不会出现在方法参数根本没有。
List<String> items=ui.getQueryParameters().get("item");
where
ui
is declared as a member in the rest resource like so :the downside is that it doesn't appear in the methods arguments at all.
像 axios js 这样的一些库在发送多值参数请求时使用方括号表示法: /stats?store[]=A&store[]=B&item[]=C&item[]=D
处理所有情况 (带或不带方括号)您可以添加另一个参数,如下所示:
检查每个参数是否为 null。
Some libs like axios js use the square brackets notation when sending a multi-value param request: /stats?store[]=A&store[]=B&item[]=C&item[]=D
To handle all cases (with or without square brackets) you can add another param like this:
Inspecting each of the arguments checking for null.