Spring Boot - 如何在Spring RestController中的地图中获取所有请求参数?

时间:2017-03-16 01:27:54

标签: java spring spring-boot

示例网址:

../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的问题还是我编写了错误的代码。 谢谢!

3 个答案:

答案 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 "";
}

希望这会有所帮助!!