示例网址:
../get/1?attr1=1&attr2=2&attr3=3
我不知道attr1,att2和attr3的名称。
当我运行此代码时,我得到了' allRequestParams'等于 1
@RequestMapping(value = "/get/", method = RequestMethod.GET)
public String search(
@RequestParam Map<String,Integer> allRequestParams) {
System.out.println(allRequestParams.size());
return "";
}
是Spring的问题还是我编写了错误的代码。 谢谢!
答案 0 :(得分:3)
您可以定义包含地图的POJO ..如下所示:
@RequestMapping(value = "/get/{searchId}", method = RequestMethod.POST)
public String search(
@PathVariable("searchId") Long searchId,
@RequestParam SearchRequest searchRequest) {
System.out.println(searchRequest.getParams.size());
return "";
}
public class SearchRequest {
private Map<String, String> params;
}
请求对象:
"params":{
"birthDate": "25.01.2011",
"lang":"en"
}
答案 1 :(得分:2)
对于您的具体示例,您是否错过了@PathVariable来访问示例网址中值为“1”的Path变量?
@RequestMapping(value = "/get/{searchId}", method = RequestMethod.GET)
public String search(
@PathVariable("searchId") Long searchId,
@RequestParam Map<String,String> allRequestParams) {
System.out.println(allRequestParams.size());
return "";
}
另外,你导入的是java.util.Map吗?
答案 2 :(得分:1)
如果您以查询参数的形式传递请求属性,那么您可以使用HttpServletRequest直接获取它。作为参数传入您的方法,并像httpServletRequest.getParameterMap()一样使用它。这将返回请求参数的不可变java.util.Map。映射的每个条目都将具有String类型的键和String []类型的值。因此,如果您只有一个值,则可以直接访问entry.getValue()[0]将为您提供第一个值。代码看起来像这样来访问值。
@RequestMapping(value = "/get/", method = RequestMethod.GET)
public String search(HttpServletRequest httpServletRequest) {
Map<String, String[]> requestParameterMap = httpServletRequest.getParameterMap();
for(String key : requestParameterMap.keySet()){
System.out.println("Key : "+ key +", Value: "+ requestParameterMap.get(key)[0]);
}
return "";
}
希望这会有所帮助!!