2017-03-16 80 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 ""; 
} 

希望這有助於!

相關問題