查询参数名称可以变量吗?喜欢:@QueryParam(“// anything”)

时间:2017-12-19 22:10:30

标签: java java-ws

我有一个资源类,其中有一个@GET,它接受一个名为operation的查询参数(这应该是静态的),然后我想采用可变数量的其他可以命名的查询参数。

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

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(//任何东西)?

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

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

多值映射是否适合这种情况 - 或者有没有办法使用变量查询参数名称?还是更好的方法?谢谢。

编辑/更新:

这是使用javax.ws.rs

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

1 个答案:

答案 0 :(得分:0)

与此question一样,使用地图:

@RequestMapping(value = {"/search/", "/search"}, method = RequestMethod.GET)
public String search(
@RequestParam Map<String,String> allRequestParams, ModelMap model) {
   return "viewName";
}