2013-12-18 25 views
0

正如標題所說, 我想在單個控制器中執行多個功能,並帶有繼承MultiActionController。如何通過Springframework中的方法名稱分離邏輯而不擴展MultiActionController?

所以我做了如下的代碼。

package org.owls.replace; 

import org.apache.log4j.Logger; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
@RequestMapping(value={"/test"}) 
public class TestController { 
    private Logger log = Logger.getLogger(TestController.class); 

    @RequestMapping(params={"m=doA"}) 
    public void doA() throws Exception{ 
     log.info("DoA !"); 
    } 

    @RequestMapping(params={"m=doB"}) 
    public void doB() throws Exception{ 
     log.info("DoB !"); 
    } 

    @RequestMapping(params={"m=doC"}) 
    public void doC() throws Exception{ 
     log.info("DoC !"); 
    } 
}; 

此代碼有效。如果我打電話給「〜/ m = doA」,它會打印「DoA」。然而,我想要的是刪除每個@RequestMapping除類(因爲參數「m」是固定的,只有方法名稱可以是一個參數)

所以我期望的是像下面的一些代碼(不工作,但請注意@RequestMappping中的params值)。

package org.owls.replace; 

import org.apache.log4j.Logger; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
@RequestMapping(value={"/test"}, params={"doA", "doB", "doC"}) 
public class TestController { 
    private Logger log = Logger.getLogger(TestController.class); 

    public void doA() throws Exception{ 
     log.info("DoA !"); 
    } 

    public void doB() throws Exception{ 
     log.info("DoB !"); 
    } 

    public void doC() throws Exception{ 
     log.info("DoC !"); 
    } 
}; 

** 哪能與參數映射方法的名稱,而不使用的MultiActionController或XML設置?

我的英文很醜,但我希望你能通過閱讀代碼來理解我的意思。感謝編輯不好的英文,並分享我的問題。 :D

回答

0

Spring MVC是可定製的,您可以通過實現並註冊您的自定義HandlerMappingHandlerAdapter來達到此目的,但它不值得。

使用你的第一個預感和@RequestMapping(params={"m=doXXX"})帶註釋的方法。這也將作爲您的方法映射的文檔,而不是做出假設。