【问题标题】:How to use multiple @RequestMapping annotations in spring?spring 如何在spring中使用多个@RequestMapping注解?
【发布时间】:2011-01-31 13:34:26
【问题描述】:

是否可以在一个方法上使用多个 @RequestMapping 注释?

喜欢:

@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
  return "welcome";
}

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    @RequestMapping 有一个String[] 值参数,因此您应该能够像这样指定多个值:

    @RequestMapping(value={"", "/", "welcome"})

    【讨论】:

    • 也就是说,我无法让“”或“/”值在我的应用程序中实际工作。它们对你有用吗?
    • 有没有办法使用多个注释将不同的成功视图和表单视图与每个请求 URL 相关联?
    • @EdBrannin 我需要使用很多,自定义,标题,消耗,参数等
    • 另外我想知道,我怎么知道哪个requestmapping被调用了。是/还是欢迎?
    • @Siddharth 1. 您可以添加和检查 HttpRequest 类型的参数。 2. 如果你真的关心调用了哪个映射,也许不要使用这种技术。 ;)
    【解决方案2】:

    根据我的测试(春季 3.0.5),@RequestMapping(value={"", "/"}) - 只有 "/" 有效,"" 无效。但是我发现这是可行的:@RequestMapping(value={"/", " * "})" * " 匹配任何内容,因此它将是默认处理程序,以防没有其他处理程序。

    【讨论】:

      【解决方案3】:

      不需要。 RequestMapping 注解支持通配符和 ant 样式的路径。看起来你只想要一个默认视图,所以你可以把

      <mvc:view-controller path="/" view-name="welcome"/>
      

      在您的配置文件中。这会将所有对根的请求转发到欢迎视图。

      【讨论】:

      • 这两行之间应该有什么东西吗?我正在使用 FreeMarkerViewResolver - 所以我必须这样做......好吧,我想我可以创建多个 ViewResolver。
      • 它没有提供多个 RequestMapping 注释所提供的灵活性。例如,如果我想让一种方法支持使用 POST 的值“/a”或使用 GET 的值“/b”。当然,解决方法相当简单(用第三种方法重构功能),但只是说它会很有用。
      【解决方案4】:

      最短的方法是:@RequestMapping({"", "/", "welcome"})

      虽然你也可以这样做:

      • @RequestMapping(value={"", "/", "welcome"})
      • @RequestMapping(path={"", "/", "welcome"})

      【讨论】:

        【解决方案5】:

        以下也是可以接受的:

        @GetMapping(path = { "/{pathVariable1}/{pathVariable1}/somePath", 
                             "/fixedPath/{some-name}/{some-id}/fixed" }, 
                    produces = "application/json")
        

        同样适用于@RequestMapping

        【讨论】:

          【解决方案6】:

          如果你仍然想获取被调用的uri,最好使用PathVariable注解。

          @PostMapping("/pub/{action:a|b|c}")
          public JSONObject handlexxx(@PathVariable String action, @RequestBody String reqStr){
          ...
          }
          

          或从请求对象中解析它。

          【讨论】:

            【解决方案7】:

            现在使用 Spring-Boot 2.0.4 - { } 不起作用。

            @RequestMapping
            

            仍然有 String[] 作为值参数,所以声明如下:

             @RequestMapping(value=["/","/index","/login","/home"], method = RequestMethod.GET)
            

            ** 更新 - 适用于 Spring-Boot 2.2**

             @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)
            

            【讨论】:

            • 方括号无效。数组字面量的有效语法是使用大括号 {}
            • @luis.espinal 方括号适用于 2.0.4 Spring-Boot 版本。我会更新我的帖子。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-07-11
            • 2017-05-15
            • 1970-01-01
            • 1970-01-01
            • 2023-01-18
            • 1970-01-01
            • 2018-09-24
            相关资源
            最近更新 更多