根据参数在不同的控制器中处理相同的URL - Spring MVC

3
我有一个控制器,处理特定的URL。
@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL()

我希望有两个独立的控制器,让我能够根据传递给它的参数处理相同的/myurl。

如果URL是

/myurl?a=1 

跳转到A控制器,否则使用B控制器。 有方法可以实现吗?

我找到了一个类似的问题Spring MVC - Request mapping, two urls with two different parameters, 其中有人提到“使用杂项控制器中的一个方法,根据请求参数调度到不同的控制器(注入)。”,如何实现?


这个问题有一个类似的方法。 - nmy
2个回答

10

控制器 1

@RequestMapping(value= {"/myurl"}, params = { "a" })
public ModelAndView handleMyURL()

控制器2

@RequestMapping(value= {"/myurl"}, params = { "b" })
public ModelAndView handleMyURL()

查看本篇文章的第四章以获取更详细信息。


-4
@Controller
@RequestMapping(value= {"/myurl"})
public TestController{
    @Autoware 
    private TestAController testAController;
    @Autoware 
    private TestBController testBController;

    public void myMethod(String a){
        if(a.equals("1"){
            testAController.foo(a);
        }else{
            testBController.foo(a);
        }

    }
}

@Controller
@RequestMapping(value= {"/myurl1"})
public class TestAController{
   public void foo(String a){
    ...
}
}

@Controller
@RequestMapping(value= {"/myurl2"})
public class TestBController{
    public void foo(String a){
     ...
    }
}

抱歉要给你点个踩,但我不喜欢这个。如果您不想使用两个独立的控制器(这是可能的,请参见其他答案),并且希望一个控制器“控制”url的行为,我建议1)拆分业务服务并保留一个控制器,或2)如果真的想要由一个控制器管理2个控制器(也许您有很多参数要处理,或者其他什么原因),只需重定向到另一个控制器;不要直接调用控制器方法。 - cripox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接