🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Spring `@RequestMapping`注解示例 > 原文: [https://howtodoinjava.com/spring-mvc/spring-mvc-requestmapping-annotation-examples/](https://howtodoinjava.com/spring-mvc/spring-mvc-requestmapping-annotation-examples/) 在 [**spring mvc hello world 应用程序**](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-hello-world-example/)中,我们看到了具有端到端功能(不包括任何数据库访问)的非常基本的员工管理应用程序。 在学习 spring mvc 模块的下一步中,我将提供`@RequestMapping`注解的一些示例,以说明如何使用`@RequestMapping`以不同的方式将 URL 映射到控制器方法。 我再次使用与 Spring MVC Hello World 应用程序相同的代码库,并使用`@RequestMapping`注解仅更改控制器类。 ## 1)仅方法级别的`@RequestMapping`注解 在`@RequestMapping`注解的这种用法中,必须提供完整的路径作为`value`属性。 例如,请看下面具有基本 CRUD 操作的控制器代码。 ```java @Controller public class EmployeeController { @RequestMapping("/employee-management/employees") public String getAllEmployees(Model model) { //application code return "employeesList"; } @RequestMapping("/employee-management/employees/add") public String addEmployee(EmployeeVO employee) { //application code return "employeesDetail"; } @RequestMapping("/employee-management/employees/update") public String updateEmployee(EmployeeVO employee) { //application code return "employeesDetail"; } @RequestMapping(value={"/employee-management/employees/remove","/employee-management/employees/delete"}) public String removeEmployee(@RequestParam("id") String employeeId) { //application code return "employeesList"; } } ``` 如果可以将多个网址映射到单个方法,则可以将具有所有不同网址的字符串参数数组传递给`value`属性,例如,我们在上面的示例中针对`removeEmployee()`方法执行了此操作。 如果您调用 URL `<BASE_URL>/employee-management/employees/remove`或`<BASE_URL>/employee-management/employees/delete`。 ## 2)类级别以及方法级别的`@RequestMapping`注解 在上面的示例中要注意的一件事是,`/ employee-management / employees`是映射到所有方法的每个 URL 的一部分。 如果我们以某种共同的步伐放它,并且每种方法应该仅具有所需的标识符,那将是很好的。 这可以通过将`@RequestMapping`注解放在类级别和方法级别上来完成。 看下面的例子。 ```java @Controller @RequestMapping("/employee-management/employees/*") public class EmployeeController { @RequestMapping public String getAllEmployees(Model model) { //application code return "employeesList"; } @RequestMapping("/add") public String addEmployee(EmployeeVO employee) { //application code return "employeesDetail"; } @RequestMapping("/update") public String updateEmployee(EmployeeVO employee) { //application code return "employeesDetail"; } @RequestMapping(value={"/remove","/delete"}) public String removeEmployee(@RequestParam("id") String employeeId) { //application code return "employeesList"; } } ``` 现在,我们也在类级别应用了注解。 请注意,此更改不会更改映射的行为。 它们与以前完全相同。 要注意的另一件事是,第一种方法`getAllEmployees()`缺少 URL 值。 由于类级别使用`/employee-management/employees/` URL 通配符,因此,如果没有其他与任何请求匹配的处理器,则将该处理器方法作为`catch`块执行。 因此,任何 URL 请求(例如`/employee-management/employees/list`或`/employee-management/employees/abcd`或`/employee-management/employees/`)触发此方法。 ## 3)仅使用 HTTP 请求类型的`@RequestMapping`注解 也有可能在类级别上只有一个`@RequestMapping`注解,而在方法级别上您没有指定 URL 值。 只需指定 HTTP 请求类型,即可将每种不同的 http 类型映射到不同的方法。 这种设计在 [**RESTFul Web 服务**](https://howtodoinjava.com/restful-web-service/) 中非常流行。 ```java @Controller @RequestMapping("/employee-management/employees") public class EmployeeController { @RequestMapping (method = RequestMethod.GET) public String getAllEmployees(Model model) { //application code return "employeesList"; } @RequestMapping (method = RequestMethod.POST) public String addEmployee(EmployeeVO employee) { //application code return "employeesDetail"; } @RequestMapping (method = RequestMethod.PUT) public String updateEmployee(EmployeeVO employee) { //application code return "employeesDetail"; } @RequestMapping (method = RequestMethod.DELETE) public String removeEmployee(@RequestParam("id") String employeeId) { //application code return "employeesList"; } } ``` 请注意,在此示例代码中,将使用相同的 URL 访问所有方法,但使用不同的 http 请求类型。 如果您想使用上面的`@RequestMapping`注解示例,则可以在此处下载源代码。 [**下载源码**](https://drive.google.com/file/d/0B7yo2HclmjI4WTk4NzVVenRHS2c/view?usp=sharing) 在评论部分中将您的评论/问题交给我。 **祝您学习愉快!**