Question

As title says, I want to perform multiple function in single controller with out inheritance MultiActionController.

So I made code like Below.

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 !");
    }
};

this code works. if I call "~/m=doA", it prints "DoA". However, what I want is remove every @RequestMapping except on class.(because parameter "m" is fixed and only method name can be a parameter)

So What I expected was some code like Below(Does not work. But pay attention on params value in @RequestMappping).

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 !");
    }
};

** how can I mapping method names with parameter without using MultiActionController or xml settings?

My English is so ugly, but I hope you can understand what I mean by reading code. Thanks for editing poor English and share my problem. :D

Was it helpful?

Solution

Spring MVC is customizable enough that you can probably achieve this by implementing and registering your custom HandlerMapping and HandlerAdapter, but it's just not worth it.

Use your first hunch and go with the @RequestMapping(params={"m=doXXX"}) annotated methods. This will also act as documentation on how your method is mapped instead of making assumptions.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top