SpringMVC @RequestMapping注解(二)

2023-05-13 11:14:57 浏览数 (1)

URL匹配顺序

如果存在多个@RequestMapping注解,SpringMVC会按照如下顺序匹配URL:

  1. 先匹配最精确的URL路径,如果匹配成功,则使用该处理方法。
  2. 如果存在多个URL路径匹配,则选择先匹配最精确的URL路径,如果匹配成功,则使用该处理方法。
  3. 如果存在多个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。

0 人点赞