SpringMVC学习之 @RequestMapping

打印 上一主题 下一主题

主题 503|帖子 503|积分 1509

关于@RequestMapping注解的相关知识,我们这将围绕@RequestMapping的功能,位置,method属性以及Params属性、headers属性。
@RequestMapping注解的位置

@RequestMapping注解的作用就是将哀求和处理哀求的控制器方法关联起来,创建映射关系。


  • @RequestMapping标识一个类:设置映射哀求的哀求路径的初始信息
  • @RequestMapping标识一个方法:设置映射哀求哀求路径的具体信息
例如:
  1. @Controller
  2. @RequestMapping("/test")
  3. public class RequestMappingController {
  4.     //此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
  5.     @RequestMapping("/testRequestMapping")
  6.     public String testRequestMapping(){
  7.         return "success";
  8.     }
  9. }
复制代码
@RequestMapping注解的value属性

@RequestMapping 注解的 value 属性用于指定哀求的 URL 路径。它可以是一个字符串或字符串数组,表现该方法或类所处理的哀求路径。以下是对 value 属性的详细介绍:
1. 基本用法
value 属性可以直接指定一个 URL 路径。例如:
  1.     @RequestMapping(value = "/users")
  2.     public String getUsers() {
  3.         // 处理 /users 请求
  4.         return "userList";
  5.     }
复制代码
在这个例子中,当客户端发送哀求到 /users 时,getUsers 方法将被调用。
2. 多个路径
value 属性可以接受一个字符串数组,如许可以将多个路径映射到同一个处理方法。例如:
  1.     @RequestMapping(value = {"/users", "/members"})
  2.     public String getUsers() {
  3.         // 处理 /users 和 /members 请求
  4.         return "userList";
  5.     }
复制代码
在这个例子中,getUsers 方法将处理对 /users 和 /members 的哀求。
3. 路径变量
可以在 value 属性中使用路径变量,使用 {} 来定义变量。例如:
  1.     @RequestMapping(value = "/users/{id}")
  2.     public String getUser(@PathVariable("id") String userId) {
  3.         // 根据 userId 获取用户信息
  4.         return "userInfo";
  5.     }
复制代码
在这个例子中,{id} 是一个路径变量,表现用户的 ID。客户端哀求 /users/123 时,userId 将被赋值为 123。
4. 组合路径
可以在 value 属性中组合多个路径。例如:
  1.     @RequestMapping(value = "/api/users")
  2.     public class UserController {
  3.    
  4.         @RequestMapping(value = "/list")
  5.         public String listUsers() {
  6.             // 处理 /api/users/list 请求
  7.             return "userList";
  8.         }
  9.    
  10.         @RequestMapping(value = "/{id}")
  11.         public String getUser(@PathVariable("id") String userId) {
  12.             // 处理 /api/users/{id} 请求
  13.             return "userInfo";
  14.         }
  15.     }
复制代码
在这个例子中,listUsers 方法处理 /api/users/list 哀求,而 getUser 方法处理 /api/users/{id} 哀求。
5. 使用正则表达式
在 Spring 4.3 及以上版本中,可以使用正则表达式来匹配路径。例如:
  1.     @RequestMapping(value = "/users/{id:[0-9]+}")
  2.     public String getUser(@PathVariable("id") String userId) {
  3.         // 处理用户 ID 为数字的请求
  4.         return "userInfo";
  5.     }
复制代码
在这个例子中,只有当 id 是数字时,getUser 方法才会被调用。
6. 结合其他属性
value 属性可以与其他属性(如 method、params、headers 等)结合使用,以进一步限制哀求的匹配。例如:
  1.     @RequestMapping(value = "/users", method = RequestMethod.GET, params = "active=true")
  2.     public String getActiveUsers() {
  3.         // 处理 /users 请求,且请求参数 active=true
  4.         return "activeUserList";
  5.     }
复制代码
@RequestMapping 注解的 value 属性是定义哀求路径的核心部分。通过合理使用该属性,可以实现灵活的 URL 路径映射,支持路径变量、多个路径、正则表达式等功能,从而构建出清晰且易于维护的 RESTful API。
@RequestMapping注解的method属性

@RequestMapping 注解的 method 属性用于指定该哀求处理方法支持的 HTTP 方法类型。通过设置 method 属性,可以限制哪些类型的 HTTP 哀求会被映射到该方法上。常见的 HTTP 方法包括 GET、POST、PUT、DELETE 等。
使用方法
method 属性可以接受一个或多个 RequestMethod 枚举值。以下是一些常见的用法示例:
1. 处理 GET 哀求
如果你希望某个方法只处理 GET 哀求,可以如许定义:
  1.   @RequestMapping(value = "/users", method = RequestMethod.GET)
  2.     public String getUsers() {
  3.         // 处理 GET 请求,返回用户列表
  4.         return "userList";
  5.     }
复制代码
2. 处理 POST 哀求
如果你希望某个方法只处理 POST 哀求,可以如许定义:
  1.   @RequestMapping(value = "/users", method = RequestMethod.POST)
  2.     public String createUser() {
  3.         // 处理 POST 请求,创建新用户
  4.         return "userCreated";
  5.     }
复制代码
3. 处理 PUT 哀求
PUT 哀求通常用于更新资源,可以如许定义:
  1.     @RequestMapping(value = "/users/{id}", method = RequestMethod.PUT)
  2.     public String updateUser(@PathVariable("id") String userId) {
  3.         // 处理 PUT 请求,更新用户信息
  4.         return "userUpdated";
  5.     }
复制代码
4. 处理 DELETE 哀求
DELETE 哀求用于删除资源,可以如许定义:
  1.     @RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE)
  2.     public String deleteUser(@PathVariable("id") String userId) {
  3.         // 处理 DELETE 请求,删除用户
  4.         return "userDeleted";
  5.     }
复制代码
5. 处理多个 HTTP 方法
如果你希望一个方法能够处理多种 HTTP 方法,可以将 method 属性设置为一个数组。例如,处理 GET 和 POST 哀求:
  1.     @RequestMapping(value = "/users", method = {RequestMethod.GET, RequestMethod.POST})
  2.     public String handleUsers() {
  3.         // 处理 GET 或 POST 请求
  4.         return "handleUsers";
  5.     }
复制代码
@RequestMapping 注解的 method 属性提供了灵活性,使得开发者可以根据差别的 HTTP 方法来定义差别的处理逻辑。这种方式有助于构建 RESTful 风格的 API,使得接口更加清晰和易于维护。通过合理使用 method 属性,可以确保哀求被正确地路由到相应的处理方法。
@RequestMapping注解的params属性

@RequestMapping 注解的 params 属性用于指定哀求中必须包含的参数。通过使用 params 属性,可以限制只有在哀求中包含特定参数时,才会调用对应的处理方法。这对于实现条件哀求处理非常有用。
1. 基本用法
params 属性可以是一个字符串,表现哀求中必须包含的参数。例如:
  1.     @RequestMapping(value = "/users", params = "active=true")
  2.     public String getActiveUsers() {
  3.         // 处理请求中包含 active=true 的 /users 请求
  4.         return "activeUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的 URL 为 /users?active=true 时,getActiveUsers 方法才会被调用。
2. 多个参数
可以使用逗号分隔多个参数,表现哀求中必须同时包含这些参数。例如:
  1.     @RequestMapping(value = "/users", params = {"role=admin", "status=active"})
  2.     public String getAdminActiveUsers() {
  3.         // 处理请求中同时包含 role=admin 和 status=active 的 /users 请求
  4.         return "adminActiveUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的 URL 为 /users?role=admin&status=active 时,getAdminActiveUsers 方法才会被调用。
3. 使用逻辑运算符
可以使用 ! 来表现参数不应该存在。例如:
  1.     @RequestMapping(value = "/users", params = "!active")
  2.     public String getInactiveUsers() {
  3.         // 处理请求中不包含 active 参数的 /users 请求
  4.         return "inactiveUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的 URL 为 /users 且不包含 active 参数时,getInactiveUsers 方法才会被调用。
4. 组合使用
可以将 params 属性与其他属性(如 method、value 等)结合使用,以进一步限制哀求的匹配。例如:
  1.     @RequestMapping(value = "/users", method = RequestMethod.GET, params = "sort=desc")
  2.     public String getSortedUsers() {
  3.         // 处理 GET 请求且请求参数 sort=desc 的 /users 请求
  4.         return "sortedUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的 URL 为 /users?sort=desc 且使用 GET 方法时,getSortedUsers 方法才会被调用。
5. 使用正则表达式
在 Spring 4.3 及以上版本中,params 属性也支持使用正则表达式。例如:
  1.     @RequestMapping(value = "/users", params = "id=[0-9]+")
  2.     public String getUserById(@RequestParam("id") String id) {
  3.         // 处理请求中 id 参数为数字的 /users 请求
  4.         return "userInfo";
  5.     }
复制代码
@RequestMapping注解的headers属性

@RequestMapping 注解的 headers 属性用于指定哀求中必须包含的 HTTP 哀求头。通过使用 headers 属性,可以限制只有在哀求中包含特定哀求头时,才会调用对应的处理方法。这对于实现条件哀求处理非常有用,尤其是在须要根据哀求头的差别来执行差别逻辑的场景中。
1. 基本用法
headers 属性可以是一个字符串,表现哀求中必须包含的哀求头。例如:
  1.     @RequestMapping(value = "/users", headers = "X-Requested-With=XMLHttpRequest")
  2.     public String getAjaxUsers() {
  3.         // 处理 AJAX 请求的 /users 请求
  4.         return "ajaxUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的头部包含 X-Requested-With: XMLHttpRequest 时,getAjaxUsers 方法才会被调用。
2. 多个哀求头
可以使用逗号分隔多个哀求头,表现哀求中必须同时包含这些哀求头。例如:
  1.     @RequestMapping(value = "/users", headers = {"Accept=application/json", "User-Agent=Mozilla"})
  2.     public String getJsonUsers() {
  3.         // 处理请求中同时包含 Accept 为 application/json 和 User-Agent 为 Mozilla 的 /users 请求
  4.         return "jsonUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的头部同时包含 Accept: application/json 和 User-Agent: Mozilla 时,getJsonUsers 方法才会被调用。
3. 使用逻辑运算符
可以使用 ! 来表现哀求头不应该存在。例如:
  1.     @RequestMapping(value = "/users", headers = "!X-Requested-With")
  2.     public String getNonAjaxUsers() {
  3.         // 处理请求中不包含 X-Requested-With 请求头的 /users 请求
  4.         return "nonAjaxUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的头部不包含 X-Requested-With 时,getNonAjaxUsers 方法才会被调用。
4. 组合使用
可以将 headers 属性与其他属性(如 method、value 等)结合使用,以进一步限制哀求的匹配。例如:
  1.     @RequestMapping(value = "/users", method = RequestMethod.GET, headers = "X-API-Version=1.0")
  2.     public String getVersion1Users() {
  3.         // 处理 GET 请求且请求头中包含 X-API-Version: 1.0 的 /users 请求
  4.         return "version1UserList";
  5.     }
复制代码
在这个例子中,只有当哀求的 URL 为 /users 且使用 GET 方法,而且哀求头中包含 X-API-Version: 1.0 时,getVersion1Users 方法才会被调用。
5. 使用正则表达式
在 Spring 4.3 及以上版本中,headers 属性也支持使用正则表达式。例如:
  1.     @RequestMapping(value = "/users", headers = "User-Agent=.*Chrome.*")
  2.     public String getChromeUsers() {
  3.         // 处理请求中 User-Agent 包含 Chrome 的 /users 请求
  4.         return "chromeUserList";
  5.     }
复制代码
在这个例子中,只有当哀求的头部中 User-Agent 包含 Chrome 时,getChromeUsers 方法才会被调用。
SpringMVC支持ant风格的路径

Spring MVC 支持使用 Ant 风格的路径模式来匹配哀求 URL。这种路径匹配方式非常灵活,答应使用通配符来定义 URL 模式,从而简化哀求映射的配置。以下是 Ant 风格路径的基本介绍和使用示例。
Ant 风格的路径模式

  • *(星号):

    • 匹配零个或多个字符(不包括斜杠 /)。
    • 例如,/users/* 可以匹配 /users/1、/users/abc,但不能匹配 /users/1/details。

  • **(双星号):

    • 匹配零个或多个路径(包括斜杠 /)。
    • 例如,/users/** 可以匹配 /users、/users/1、/users/1/details、/users/abc/xyz 等。

  • ?(问号):

    • 匹配单个字符。
    • 例如,/users/? 可以匹配 /users/1、/users/a,但不能匹配 /users/abc。

使用示例
以下是一些使用 Ant 风格路径的示例:
1. 使用 * 匹配单层路径
  1.     @Controller
  2.     @RequestMapping("/users/*")
  3.     public class UserController {
  4.    
  5.         @RequestMapping
  6.         public String handleUser() {
  7.             // 处理 /users/{username} 的请求
  8.             return "userProfile";
  9.         }
  10.     }
复制代码
在这个例子中,handleUser 方法将处理所有 /users/{username} 的哀求。
2. 使用** 匹配多层路径
  1.     @Controller
  2.     @RequestMapping("/users/**")
  3.     public class UserController {
  4.    
  5.         @RequestMapping
  6.         public String handleAllUserRequests() {
  7.             // 处理所有以 /users 开头的请求
  8.             return "allUserRequests";
  9.         }
  10.     }
复制代码
在这个例子中,handleAllUserRequests 方法将处理所有以 /users 开头的哀求,包括 /users、/users/1、/users/1/details 等。
3. 使用 ? 匹配单个字符
  1.     @Controller
  2.     @RequestMapping("/users/?")
  3.     public class UserController {
  4.    
  5.         @RequestMapping
  6.         public String handleSingleCharacterUser() {
  7.             // 处理 /users/a 或 /users/1 的请求
  8.             return "singleCharacterUser";
  9.         }
  10.     }
复制代码
在这个例子中,handleSingleCharacterUser 方法将处理 /users/a 和 /users/1 的哀求。
组合使用
可以将 Ant 风格的路径与其他属性(如 method、params 等)结合使用,以实现更复杂的哀求映射。例如:
  1.     @RequestMapping(value = "/users/**", method = RequestMethod.GET)
  2.     public String getAllUsers() {
  3.         // 处理所有 GET 请求的 /users 开头的请求
  4.         return "getAllUsers";
  5.     }
复制代码
SpringMVC支持路径中的占位符

在 Spring MVC 中,支持在哀求路径中使用占位符(也称为路径变量),这使得开发者能够动态地提取 URL 中的部分内容并将其通报给处理方法。占位符通常使用 {} 来定义,答应在 URL 中匹配特定的变量。
1. 基本用法
使用占位符的基本语法如下:
  1.     @RequestMapping("/users/{id}")
  2.     public String getUser(@PathVariable("id") String userId) {
  3.         // 处理 /users/{id} 的请求
  4.         // userId 将被赋值为 URL 中的 id 部分
  5.         return "userProfile";
  6.     }
复制代码
在这个例子中,当哀求的 URL 为 /users/123 时,userId 将被赋值为 123。
2. 多个占位符
可以在同一个路径中使用多个占位符:
  1.     @RequestMapping("/users/{userId}/posts/{postId}")
  2.     public String getUserPost(@PathVariable("userId") String userId,
  3.                                @PathVariable("postId") String postId) {
  4.         // 处理 /users/{userId}/posts/{postId} 的请求
  5.         return "userPost";
  6.     }
复制代码
在这个例子中,当哀求的 URL 为 /users/123/posts/456 时,userId 将被赋值为 123,postId 将被赋值为 456。
3. 可选路径变量
在 Spring 4.3 及以上版本中,可以使用 @RequestMapping 的 value 属性结合 ? 来实现可选路径变量。例如:
  1.     @RequestMapping("/users/{id}/details/{detailId:[0-9]*}")
  2.     public String getUserDetails(@PathVariable("id") String userId,
  3.                                   @PathVariable(value = "detailId", required = false) String detailId) {
  4.         // 处理 /users/{id}/details 或 /users/{id}/details/{detailId} 的请求
  5.         return "userDetails";
  6.     }
复制代码
在这个例子中,detailId 是可选的,如果哀求的 URL 为 /users/123/details,则 detailId 将为 null。
4. 使用正则表达式
可以在路径变量中使用正则表达式来限制匹配的格式。例如:
  1.     @RequestMapping("/users/{id:[0-9]+}")
  2.     public String getUserById(@PathVariable("id") String userId) {
  3.         // 处理 /users/{id} 的请求,其中 id 必须是数字
  4.         return "userProfile";
  5.     }
复制代码
在这个例子中,只有当 id 是数字时,getUserById 方法才会被调用。
5. 结合其他哀求参数
可以将路径变量与其他哀求参数结合使用:
  1.     @RequestMapping("/users/{id}")
  2.     public String getUser(@PathVariable("id") String userId,
  3.                           @RequestParam(value = "active", required = false) Boolean active) {
  4.         // 处理 /users/{id} 的请求,同时可以获取 active 请求参数
  5.         return "userProfile";
  6.     }
复制代码
在这个例子中,active 是一个可选的哀求参数,可以通过 URL 查询字符串通报。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表