我有一个资源类,其中有一个@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 可以通过多种不同的方式构建,这样就无需更改代码即可使用模拟服务。
最佳答案
就像这个 question ,使用 map :
@RequestMapping(value = {"/search/", "/search"}, method = RequestMethod.GET)
public String search(
@RequestParam Map<String,String> allRequestParams, ModelMap model) {
return "viewName";
}
关于java - 查询参数名称可以是可变的吗?像: @QueryParam ("//anything"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895931/