【问题标题】:Spring MVC - Request mapping, two urls with two different parametersSpring MVC - 请求映射,具有两个不同参数的两个 url
【发布时间】:2011-07-04 12:14:52
【问题描述】:

在 Spring 中是否可以有一个方法具有两个不同的 url,每个方法具有不同的参数?

下面是伪代码

@RequestMethod(URL1-param1, URL2-param2)
public void handleAction(@ModelAttribute("A") A a, ...) {
}

同时ULR1在其他一些Controller中被映射为

@RequestMethod(URL1)
public void handleAction1(@ModelAttribute("A") A a, ...) {
}

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    更新:看来您的问题完全不同。

    不,您不能在不同的控制器中拥有具有不同参数的相同 url。而且它没有多大意义 - url 指定一个资源或操作,它不能在两个控制器中以完全相同的方式命名(表示不同的行为)。

    你有两个选择:

    • 使用不同的网址
    • 在 misc 控制器中使用一种方法,该方法根据请求参数分派到不同的控制器(注入的控制器)。

    原答案:

    没有。但是你可以有两种方法来做同样的事情:

    @RequestMethod("/foo")
    public void foo(@ModelAttribute("A") A a) {
        foobar(a, null);
    }
    
    @RequestMethod("/bar")
    public void bar(@ModelAttribute("B") B b) {
        foobar(null, b);
    }
    

    如果我没有理解正确,而你想要相同的 ModelAttribute,那么简单:

    @RequestMapping(value={"/foo", "/bar"})
    

    最后 - 如果您需要不同的请求参数,您可以使用 @RequestParam(required=false) 列出所有可能的参数。

    【讨论】:

    • @svlada 你可以通过将它放在foobar 方法中来避免它。但是您需要不同的模型属性,还是只需要不同的 url?
    • 我需要具有不同参数的不同网址。
    • 但是不同的请求参数,或者不同的模型属性?
    • 不同的参数。但 URL1 模式必须存在于两个不同的控制器中。
    • 然后使用@RequestParam(required=false)
    【解决方案2】:

    您可以像这样为您的处理程序提供多个映射

    @RequestMapping(value={"", "/", "welcome"})
    public void handleAction(@ModelAttribute("A") A a, ...) { }
    

    但是如果你想为每个映射使用不同的参数,那么你必须提取你的方法。

    【讨论】:

      【解决方案3】:

      类似的东西

      @RequestMapping(value={"URL1"}, method=RequestMethod.POST)
      public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
          return helperSubmit();
      }
      
      @RequestMapping(value={"URL2"}, method=RequestMethod.POST)
      public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
          return helperSubmit();
      }
      
      private helperSubmit() {
        return "redirect:" + someUrl;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2021-09-02
        • 2011-12-14
        相关资源
        最近更新 更多