在泽西岛处理多个查询参数

2022-09-01 01:21:34

在我正在处理的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)

问题仍然是如何实现同一参数的多个值。


答案 1

如果将方法参数的类型从 更改为集合(如 ),则应该会得到一个包含要查找的所有值的集合。itemStringList<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

支持以下类型:
  1. 基元类型
  2. 具有接受单个参数的构造函数的类型。String
  3. 具有以单个参数命名的静态方法的类型。valueOfString
  4. List<T>、或满足上述 2 或 3 的情况。Set<T>SortedSet<T>T

答案 2

List<String> items=ui.getQueryParameters().get("item");

其中 被声明为其余资源中的成员,如下所示:ui

@Context UriInfo ui;

缺点是它根本不出现在方法参数中。


推荐