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

Mou*_*rim 7 java spring spring-boot

示例网址:

../get/1?attr1=1&attr2=2&attr3=3
Run Code Online (Sandbox Code Playgroud)

我不知道 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 "";
}
Run Code Online (Sandbox Code Playgroud)

是 Spring 有问题还是我写错了代码。谢谢!

小智 6

如果您以查询参数的形式传递请求属性,那么您可以使用 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 "";
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 !!


Mat*_*uis 4

对于您的具体示例,您是否缺少 @PathVariable 来访问示例 URL 中值为“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 "";
}
Run Code Online (Sandbox Code Playgroud)

另外,您正在导入 java.util.Map 吗?