Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jersey中处理多个查询参数_Java_Rest_Path_Jersey - Fatal编程技术网

Java 在Jersey中处理多个查询参数

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(@

在我正在使用的web服务中,我需要实现一个URI,该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中键入参数,它将返回所有数据。但是,我不确定如何处理更多的参数

更新

通过向方法中添加第二个参数,我已经了解了如何使用两个不同的参数,如下所示:

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将是
    @谢谢。