【Spring】SpringMVC中@RequestMapping 详解

1、简介

在Spring MVC中,@RequestMapping 是一个非常重要的注解,它用于映射web请求(如HTTP请求)到特定的处理器方法或处理器类。

2、 基本用法

  • @RequestMapping 可以标注在方法或类上。
  • 当标注在类上时,它提供了初步的请求映射信息,如请求路径的前缀。
  • 当标注在方法上时,它提供了具体的请求映射信息。
  • 示例(getUser 方法映射到的URL路径为 /users/{id}。):
java 复制代码
@Controller  
@RequestMapping("/users")  
public class UserController {  
  
    @RequestMapping("/{id}")  
    public String getUser(@PathVariable("id") Long id, Model model) {  
        // ...  
        return "userView";  
    }  
}

3、 请求方法

  • @RequestMapping 允许指定HTTP请求方法(如GET、POST、PUT、DELETE等)。
  • 可以使用method属性或RequestMethod枚举来指定。
  • 示例:
java 复制代码
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)  
public String getUserById(@PathVariable("id") Long id, Model model) {  
    // ...  
    return "userView";  
}
  • 或者使用快捷的HTTP方法注解(如@GetMapping、@PostMapping等):
java 复制代码
@GetMapping("/users/{id}")  
public String getUserById(@PathVariable("id") Long id, Model model) {  
    // ...  
    return "userView";  
}

4、参数

@RequestMapping 有几个主要的参数:

  • value:用于指定请求URL的映射值。
  • method:用于指定请求方法,如GET、POST等。
  • params:用于指定请求参数的条件。例如,params="myParam=myValue" 只会匹配那些包含参数myParam且其值为myValue的请求。
  • headers:用于指定请求头的条件。
  • consumes:指定处理请求的MIME类型(如application/json)。
  • produces:指定响应的MIME类型。

5、 通配符

在value属性中,你可以使用通配符来匹配URL路径。例如:

  • ?:匹配一个字符。
  • *:匹配零个或多个字符。
  • **:匹配零个或多个目录。

6、路径变量

  • 使用{variableName}的形式可以在URL路径中定义变量,这些变量可以通过@PathVariable注解在方法参数中捕获。

7、组合注解

  • Spring MVC提供了多个组合注解,如@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping等,它们都是@RequestMapping的特化版本,用于更简洁地表示特定HTTP方法的映射。

8、示例

  • 以下示例中getUserById 方法映射到 /api/v1/users/{id} 的GET请求,而createUser 方法映射到 /api/v1/users 的POST请求。
java 复制代码
@RestController  
@RequestMapping("/api/v1")  
public class MyRestController {  
  
    @GetMapping("/users/{id}")  
    public User getUserById(@PathVariable Long id) {  
        // ...  
        return user;  
    }  
  
    @PostMapping("/users")  
    public ResponseEntity<User> createUser(@RequestBody User user) {  
        // ...  
        return ResponseEntity.created(URI.create("/api/v1/users/" + user.getId())).body(user);  
    }  
}
相关推荐
San813_LDD4 小时前
[C语言]《Dev-C++ 报错解决手册(Day0607 精华版)》
java·前端·javascript
Anastasiozzzz5 小时前
从有限状态机到智能体图:传统 FSM 与 Agent Graph的演进
java·人工智能·python·ai
GetcharZp11 小时前
GitHub 49K+ Star!C++ 开发者必知的 JSON 神级库:从零到精通全指北
后端
xujinwei_gingko11 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
智码看视界11 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
程序员cxuan11 小时前
Claude Fable 5 来了
人工智能·后端·程序员
JS菌11 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
wang090712 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java12 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis