【问题标题】:Handle same URL in different controllers based on parameters - Spring MVC根据参数处理不同控制器中的相同 URL - Spring MVC
【发布时间】:2015-08-03 21:01:36
【问题描述】:

我有一个处理特定 URL 的控制器

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

相反,我想要 2 个独立的控制器,让我根据传递给它的参数来处理相同的 /myurl。

如果网址是

/myurl?a=1 

转到控制器 A,否则使用控制器 B。 有没有办法做到这一点?

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

【问题讨论】:

  • This question 有类似的方法。

标签: java spring spring-mvc


【解决方案1】:

控制器 1

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

控制器 2

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

查看this post的第4章了解更多详情

【讨论】:

    【解决方案2】:
    @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 个控制器(也许你有很多参数要处理,或者其他什么),只需重定向到另一个控制器;不要直接调用控制器方法。
    猜你喜欢
    • 2011-09-20
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多