2012-04-03 66 views
0

我有一個Spring MVC的控制器具有以下方法列表:Spring MVC的 - 如何獲得的@RequestMethod方法參數(可能由@RequestParam屬性)

@RequestMapping(value = {"/filter"}, method = RequestMethod.GET) 
    @ResponseBody 
    public List<MetricType> getMetricTypes( 
      @RequestParam(value = "subject", required = false) Long subjectId, 
      @RequestParam(value = "area", required = false) Long areaId, 
      @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren, 
      @RequestParam(value = "componentGroup", required = false) Long componentGroupId  
      ) throws Exception 
    { 
     //Some code 
    } 

是否有可能得到的參數列表當前方法編程(例如通過@RequestParam註釋)? 解決方案應該在沒有調試符號的情況下工作。 如果需要,方法名稱可以被硬編碼。

我想檢查查詢字符串是否包含無效參數(例如,由於錯字)。 我將比較來自請求的查詢參數名稱與方法簽名中的查詢參數名稱(如果可能的話)。

修訂

溶液應爲可選的(所需=假)參數以及工作。

非常感謝

馬克西姆

+0

你爲什麼要接受拼寫錯誤的參數?在所有參數最有可能被硬編碼到正在與您的Web應用程序進行通信的網站中。只鍵入一次,輸入正確! – Geerten 2012-04-03 13:05:06

+0

我想拒絕輸入的參數。如果在參數名稱中存在拼寫錯誤,我想顯示錯誤消息。爲了做到這一點,我想比較用戶通過方法簽名傳遞的參數 – 2012-04-03 13:34:33

+0

RequestMapping已經會拒絕輸入錯誤的參數。那麼比較的好處是什麼? – Geerten 2012-04-03 13:37:03

回答

2

可以使用HttpServletRequest request作爲

public List<MetricType> getMetricTypes( 
      @RequestParam(value = "subject", required = false) Long subjectId, 
      @RequestParam(value = "area", required = false) Long areaId, 
      @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren, 
      @RequestParam(value = "componentGroup", required = false) Long componentGroupId , 
HttpServletRequest request 
      ) throws Exception 

,然後讓所有的請求參數的名稱作爲

request.getParameterNames() 

,並使用循環在他們做你的工作爲

for (String parameterName:requestParameterNames){ 

} 
+0

謝謝你的貢獻。我問過「是否可以獲取當前方法的**參數列表**」,而不是請求中傳遞的實際參數列表。我需要從方法簽名中獲取參數列表(可能使用@RequestParam註釋)。 – 2012-04-04 11:15:25

+0

手動完成。你可以創建一個擁有所有已知參數並使用@ModelAttribute的類 – 2012-04-04 13:34:25

相關問題