1

我有一个资源类,其中有一个@GET,它采用一个称为操作的查询参数(这应该是静态的),然后我想采用可变数量的其他查询参数,这些参数可以命名为任何东西。

我的第一个想法是做这样的事情:

public Response get(
    @QueryParam("operation") String operation, 
    @QueryParam("list") final List<String> list) {
    //do stuff
}

这里的问题是我必须提出如下请求:

...?operation=logging&list=ABC&list=XYZ

虽然我想要的是能够拥有这样的东西:

...?operation=logging&anything=ABC&something_else=XYZ

有没有办法让列表查询参数@QueryParam(//anything)?

在进行一些信息收集时,我遇到了这种方法:

@GET
public void gettest(@Context UriInfo ui) {
    MultivaluedMap<String, String> queryParams = ui.getQueryParameters();   
    String operation = queryParams.getFirst("operation");   
    for (String theKey : queryParams.keySet()) {
        System.out.println(queryParams.getFirst(theKey));
        //do stuff with each other query param
    }   
}

multivaluedmap 是解决这种情况的方法吗?或者有没有办法使用变量查询参数名称?还是更好的方法?谢谢。

编辑/更新:

这是使用 javax.ws.rs

用例是:此应用程序用作模拟响应的工具(用于其他应用程序中的测试目的)。通过查找“操作”然后查找某种“id”从数据库中检索模拟响应。实际使用的 id 可以是给定的任何“列表”查询参数。这样做的原因是为不同的应用程序提供了使用这个模拟服务的灵活性——应用程序中的 url 可以以多种不同的方式构建,这样就不需要改变他们的代码就可以使用模拟服务服务。

4

1 回答 1

0

在这个问题中,使用地图:

@RequestMapping(value = {"/search/", "/search"}, method = RequestMethod.GET)
public String search(
@RequestParam Map<String,String> allRequestParams, ModelMap model) {
   return "viewName";
}
于 2017-12-20T01:09:13.277 回答