2011-07-11 31 views
4

嗨否定參數,可以在Spring控制器的RequestMapping

我有我的控制器兩種方法,我試圖讓一個方法來火,如果一個參數是有一定價值,另一種方法,如果參數不是那個值。當param等於某個值時,我的「not」方法會觸發。

根據(我的理解)this我寫正確的表達式。下面是這兩個方法的簽名:

@RequestMapping(value = "/doit", params= {"output=grouped", "display!=1"}) 
public @ResponseBody HashMap<String, Object> doSomething(
@RequestParam("text") String text, 
@RequestParam("display") String display) 
{ 
    // this method runs if display=1 but why? 
} 


@RequestMapping(value = "/doit", params= {"output=grouped", "display=1"}) 
public @ResponseBody HashMap<String, Object> doSomethingElse(
@RequestParam("text") String text) 
{ 
    // this method is not being called when display=1...why not? 
} 

我已經啓用了春天的調試日誌,我看到春天的參數轉換爲RequestParam字符串值「1」。然而,在下一行中,它決定將其映射到錯誤的方法。

我在做什麼錯?

謝謝!

回答

3

這不是你的錯:它是一個錯誤SPR-8059。目前它已在版本3.1M2和svn Trunk rev 4408中修復。

解決方法是不要在@RequestMapping中使用!=。相反,您必須手動使用if

@RequestMapping(value = "/doit", params= {"output=grouped") 
public @ResponseBody HashMap<String, Object> acceptAll(
    @RequestParam("text") String text, 
    @RequestParam("display") String display) { 
    if("1".equals(display) { 
     return doSomethingElse(text); 
    } else { 
     return doSomething(text,display); 
    } 
} 
相關問題