URL匹配顺序
如果存在多个@RequestMapping注解,SpringMVC会按照如下顺序匹配URL:
- 先匹配最精确的URL路径,如果匹配成功,则使用该处理方法。
- 如果存在多个URL路径匹配,则选择先匹配最精确的URL路径,如果匹配成功,则使用该处理方法。
- 如果存在多个URL路径匹配,则选择@RequestMapping注解中指定的HTTP请求方法最匹配的方法。
下面是一个示例:
代码语言:javascript复制@Controller
@RequestMapping(value="/users")
public class UserController {
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public ModelAndView getUser(@PathVariable int id) {
// 方法体
}
@RequestMapping(value="/add", method=RequestMethod.GET)
public ModelAndView addUser() {
// 方法体
}
}
在上面的示例中,我们定义了两个处理方法,分别处理"/users/{id}"和"/users/add"两个URL路径。当请求的URL为"/users/123"时,SpringMVC会优先选择getUser()方法来处理请求;当请求的URL为"/users/add"时,SpringMVC会选择addUser()方法来处理请求。
请求参数
@RequestMapping注解还支持获取HTTP请求中的参数,例如:
代码语言:javascript复制@RequestMapping(value="/users", method=RequestMethod.GET)
public ModelAndView getUsers(@RequestParam(value="page", defaultValue="1") int page) {
// 方法体
}
在上面的示例中,我们使用@RequestParam注解来获取名为page的请求参数。如果请求中没有指定page参数,则默认值为1。如果请求中指定了page参数,则将该参数的值传递给方法。
处理结果
@RequestMapping注解支持多种处理结果,包括View、ModelAndView、String等。下面是一些示例:
返回View
代码语言:javascript复制@RequestMapping(value="/users", method=RequestMethod.GET)
public String getUsers(Model model) {
// 方法体
return "users";
}
在上面的示例中,我们使用String类型的返回值来指定View的名称。在处理请求后,SpringMVC会自动加载名为"users"的View,并将Model中的数据传递给View。
返回ModelAndView
代码语言:javascript复制@RequestMapping(value="/users/{id}", method=RequestMethod.GET)
public ModelAndView getUser(@PathVariable int id) {
// 方法体
ModelAndView mav = new ModelAndView("user");
mav.addObject("user", user);
return mav;
}
在上面的示例中,我们使用ModelAndView类型的返回值来同时指定View的名称和Model的数据。在处理请求后,SpringMVC会自动加载名为"user"的View,并将user对象的数据传递给View。