【问题标题】:Spring Boot - How to get all request params in a map in Spring RestController?Spring Boot - 如何在 Spring RestController 的地图中获取所有请求参数?
【发布时间】:2017-08-07 00:23:51
【问题描述】:

示例网址:

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

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

对于您的具体示例,您是否缺少 @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 "";
}

另外,你是在导入 java.util.Map 吗?

【讨论】:

  • 正确,我添加了它,但我仍然 allRequestParams Map size = 1
  • 你能输出你在 Map 中获得的唯一元素的键和值吗?
【解决方案2】:

您可以定义一个包含地图的 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"       
 }

【讨论】:

    【解决方案3】:

    如果你以查询参数的形式传递请求属性,那么你可以直接使用 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 "";
    }
    

    希望对你有帮助!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2022-08-23
      • 2015-11-06
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      相关资源
      最近更新 更多