@RequestMapping
@RequestMapping
是 Spring MVC 中的一个注解,用于将 HTTP 请求映射到控制器的处理方法,从而指定控制器中的方法如何处理来自客户端的 HTTP 请求。
语法
@RequestMapping
可用于类和方法级别。- 在类级别上使用时,它将为该类中所有处理方法提供通用的基础路径(统一前缀)。可以更好的按照功能模块进行区分,有利于模块化的管理维护。
- 在方法级别上使用时,它将指定该方法可以处理的 HTTP 请求类型和路径,支持为同一个方法指定多个路径。
@RequestMapping(value = "deleteUser") @RequestMapping(value = {"addUser", "saveUser"})
请求类型
@RequestMapping
支持与 HTTP 请求相关的方法,例如 GET、POST、PUT、DELETE 等。- 可以通过指定
method
属性来指定所需的 HTTP 请求方法类型。如果未指定,则默认支持所有请求方法类型。支持为同一个方法指定多个请求方式。
@RequestMapping(value = "hello", method = RequestMethod.POST) @RequestMapping(value = "hello", method = {RequestMethod.POST, RequestMethod.PUT})
- 当用户发起了 @RequestMapping 不支持的请求操作,SpringMVC 在服务器端抛出一个 405 错误 Method Not Allowed。
路径匹配
@RequestMapping
支持 Ant-style 路径模式和正则表达式路径模式,用于匹配 URL 路径。- Ant-style 路径模式中,可以使用通配符和占位符来表示变量。
- 正则表达式路径模式中,可以使用标准的 Java 正则表达式语法来匹配 URL 路径。
请求参数和头部信息
@RequestMapping
还支持与请求参数和头部信息相关的条件匹配,例如请求参数名称、值、存在性和头部信息。- 可以通过指定
params
和headers
属性来指定所需的请求参数和头部信息的条件,以便在控制器方法中进行条件性检查。
示例
package world.xuewei.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 用户控制器 * * @author 薛伟 * @since 2023/10/31 16:18 */ @Controller @RequestMapping("user") public class UserController { @RequestMapping(value = "deleteUser") public String deleteUser(HttpServletRequest request, HttpServletResponse response) { System.out.println("UserController.deleteUser"); return "/hello.jsp"; } /** * 为同一个方法指定两个访问路径 */ @RequestMapping(value = {"addUser", "saveUser"}, method = RequestMethod.POST) public String saveUser(HttpServletRequest request, HttpServletResponse response) { System.out.println("UserController.saveUser"); return "/hello.jsp"; } /** * 为同一个方法指定多个请求方式 */ @RequestMapping(value = "updateUser", method = {RequestMethod.POST, RequestMethod.PUT}) public String updateUser(HttpServletRequest request, HttpServletResponse response) { System.out.println("UserController.saveUser"); return "/hello.jsp"; } }