getmapping 和 requestmapping的区别
时间: 2024-09-18 17:16:21 浏览: 41
`@GetMapping` 和 `@RequestMapping` 都是Spring MVC中的注解,它们都用于映射HTTP请求到特定的方法上,但用途稍有不同。
`@GetMapping` 主要是针对GET请求,用于处理那些基于查询字符串、URI路径参数或HTML表单提交的GET请求。它专为只接收GET请求而设计,如果尝试用POST或其他方法请求,它将不会匹配。
例如:
```java
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found", User.class, id));
}
```
这里,当客户端发送GET请求到类似 `/users/123` 的路径时,`getUser`方法会被调用。
相比之下,`@RequestMapping` 更加通用,它可以处理GET、POST、PUT、DELETE等所有HTTP方法,以及HEAD、OPTIONS等特殊方法。你可以用它来统一管理一个资源的不同操作,无需为每种请求方式创建单独的方法:
```java
@PostMapping("/users")
@PostMapping("/{id}")
public ResponseEntity<?> createUserOrUpdate(@RequestBody User user, @PathVariable(value = "id") Long id) {
if (id != null) {
return userRepository.findById(id)
.map(userRepository::saveAndFlush)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
} else {
return userRepository.save(user);
}
}
```
在这个例子中,`createUserOrUpdate`方法可以根据请求的URI路径选择保存新用户还是更新现有用户。
总结来说,`@GetMapping`更专注于GET请求,而`@RequestMapping`提供了一种更为灵活的方式来处理多种类型的请求。
阅读全文