如何在没有扩展MultiActionController的情况下在Springframework中按方法名称分隔逻辑?

时间:2013-12-18 05:15:33

标签: java spring methods mapping url-parameters

正如标题所说, 我想在没有继承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

1 个答案:

答案 0 :(得分:0)

Spring MVC可以自定义,您可以通过实现和注册自定义HandlerMappingHandlerAdapter来实现这一目标,但这不值得。

使用您的第一次预感并使用@RequestMapping(params={"m=doXXX"})带注释的方法。这也将作为关于如何映射方法的文档,而不是做出假设。