2012-03-19 32 views
0

編輯Spring的建議與參數缺少

我覺得有一些混亂,我沒有使用這兩個在我的控制器下面的方法。我只是使用「doMethod(HttpServletRequest請求)」。我的建議然後適用並據此工作。我的問題是「doMethod(HttpServletRequest請求)」不需要HttpServletRequest參數,只有應用於它的建議會使用它。所以我想知道是否可以將我的方法從「doMethod(HttpServletRequest請求)」更改爲「doMethod()」,但仍然能夠攔截HttpServletRequest並應用其建議(因爲我知道spring有權訪問它)

Spring MVC中,你可以有一個方法,像這樣:

@RequestMapping 
public void doMethod() { 
    //some logic here 
} 

如果我需要一些其他的說法,我可以改成這樣:

@RequestMapping 
public void doMethod(HttpServletRequest httpServletRequest) { 
    //some logic with request 
} 

和春天將委託相同的方法無論哪種方式,但填寫我的論點,如果我加上它ough一些巫術(我不明白)

我的問題做的是AOP的時候,像這樣:

@Before(value=(execution(* * com.domain.package.doMethod(..)), argNames=httpServletRequest) 
public void advice(HttpServletRequest httpServetRequest) { 
    //some before advice 
} 

應用第二種方法的定義時,這是有道理的,但我怎麼能得到這個工作與第一個不包含'HttpServletRequest'參數?

回答

1

我不認爲你可以做你想做的事。 Spring MVC注入了從HTTP請求(屬性,URL等)中獲取它們的參數。他們還支持如果提到的「內置」參數列表總是被髮送。

當您的控制器在HTTP請求上下文中正常調用時,HttpRequest的實例將始終發送,因此此方法的第一個無參數版本將永遠不會被調用。

爲了讓它調用你應該映射它到不同的URL或不同的HTTP方法或不同的內容類型。