春天如何使用多个@RequestMapping注释?


247

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

喜欢 :

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

Answers:


435

@RequestMapping有一个String[]值参数,因此您应该可以指定多个值,如下所示:

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


2
就是说,我在使“”或“ /”值在我的应用程序中实际工作时遇到了麻烦。他们为你工作吗?
Ed Brannin 2010年

是否可以使用多个注释将不同的成功视图和表单视图与每个请求URL关联起来?
k-den

@EdBrannin我需要许多使用,自定义,标头,消耗,参数等
deFreitas 2016年

我也想知道,我怎么知道已经调用了哪个请求映射。是/还是欢迎?

1
@Siddharth 1.您可能可以添加和检查HttpRequest类型的参数。2.如果您真的在乎调用了哪个映射,也许不要使用此技术。;)
Ed Brannin

24

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


13

不需要。RequestMapping注释支持通配符和蚂蚁风格的路径。看起来您也只想使用默认视图,因此您可以

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

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


这两行之间应该有东西吗?我正在使用FreeMarkerViewResolver-所以我必须走这种方式...好吧,我想我可以只创建多个ViewResolver。
Wuntee 2010年

2
它没有提供多个RequestMapping注释所提供的灵活性。例如,如果我想让一种方法支持POST的值“ / a”或支持GET的值“ / b”。当然,解决方法相当简单(用第三种方法重构功能),但是只是说这将很有用。
simon 2014年

1

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

尽管您也可以这样做:

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

1

现在使用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

@ luis.espinal方括号适用于2.0.4 Spring-Boot版本。我将更新我的帖子。
猎鹰

0

以下内容也是可以接受的:

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

同样可以应用于@RequestMapping以及


-2

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

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

或从请求对象解析它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.