2017-03-16 94 views
2

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

../get/1?attr1=1&attr2=2&attr3=3 

我不知道attR1位,ATT2和attr3的名字。

当我运行这段代码,我得到“allRequestParams”的大小等于

@RequestMapping(value = "/get/", method = RequestMethod.GET) 
public String search(
@RequestParam Map<String,Integer> allRequestParams) { 
    System.out.println(allRequestParams.size()); 
    return ""; 
} 

是不是问题,Spring或我写了一个错误的代码。 谢谢!

+0

请求参数值的类型是什么?他们都是“整数”吗?尝试将您的映射更改为'类型' –

+0

值为整数。 我用String测试过,但没有得到预期的大小(地图大小必须是3) –

+0

[Spring MVC - 如何在Spring控制器中获取地图中的所有请求参数?]/questions/7312436/spring-mvc-how-to-get-all-request-params-in-a-map-in-spring-controller) – rvit34

回答

2

对于您的具体示例,您是不是错过了@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?

+0

对不起,我添加了它但仍然全部请求地址大小= 1 –

+0

你能输出你在Map中获得的唯一元素的键和值? –

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"  
} 
0

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

希望这有助于!

相关问题