处理http请求的注解
@RequestMapping
@RequestMapping 是 Spring Framework 中用于处理 HTTP 请求的一个非常重要的注解。它可以应用于类或方法,定义请求的
URL 路径、请求方法、请求参数等信息。
1. 用法
- 类级别: 当在类上使用时,定义了类的所有方法的公共前缀路径。
- 方法级别: 当在方法上使用时,定义了该方法处理的具体路径和请求方式。
2. 主要属性
- value: 定义请求的 URL 路径,可以是单个路径或路径数组。
- method: 指定处理的 HTTP 请求方法,如
GET、POST、PUT、DELETE等。 - params: 定义请求参数条件,只有当请求中包含指定参数时,才会调用该方法。
- headers: 定义请求头条件,只有当请求中包含指定头信息时,才会调用该方法。
- produces: 指定方法返回的媒体类型(Content-Type),如
application/json或text/html。
3. 示例
类级别的 @RequestMapping
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api") // 所有方法的公共前缀
public class MyController {
@GetMapping("/users") // 处理 GET 请求 /api/users
public List<User> getUsers() {
// 返回用户列表
}
@PostMapping("/users") // 处理 POST 请求 /api/users
public void createUser(@RequestBody User user) {
// 创建新用户
}
}
方法级别的 @RequestMapping
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api") // 类级别的公共前缀
public class MyController {
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET) // 处理 GET 请求 /api/users/{id}
public User getUserById(@PathVariable Integer id) {
// 根据 ID 获取用户
}
@RequestMapping(value = "/users", method = RequestMethod.PUT) // 处理 PUT 请求 /api/users
public void updateUser(@RequestBody User user) {
// 更新用户信息
}
}
4. 小结
@RequestMapping是一个灵活的注解,可以用于处理各种类型的 HTTP 请求。- 它允许你定义 URL 路径、HTTP 方法、请求参数和头信息等条件,提供了丰富的配置选项。
- 在 Spring 4.3 之后,常用的 HTTP 方法(如
GET、POST、PUT、DELETE)也提供了更简洁的注解,如@GetMapping、@PostMapping等。
@GetMapping、@PostMapping
@GetMapping 和 @PostMapping 是 Spring Framework 中的两个注解,用于简化处理
HTTP GET 和 POST 请求的操作。
它们是 @RequestMapping 注解的特定变体,专门用于这两种常用的请求方法。
@GetMapping
- 用途: 用于处理 HTTP GET 请求。GET 请求通常用于从服务器获取数据。
- 用法: 可以在控制器的方法上使用
@GetMapping,并指定 URL 路径。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/users") // 处理 GET 请求 /users
public List<User> getUsers() {
// 返回用户列表
return userService.getAllUsers();
}
@GetMapping("/users/{id}") // 处理 GET 请求 /users/{id}
public User getUserById(@PathVariable Integer id) {
// 根据 ID 返回用户信息
return userService.getUserById(id);
}
}
@PostMapping
- 用途: 用于处理 HTTP POST 请求。POST 请求通常用于向服务器发送数据以创建新的资源。
- 用法: 你可以在控制器的方法上使用
@PostMapping,并指定 URL 路径。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/users") // 处理 POST 请求 /users
public void createUser(@RequestBody User user) {
// 创建新用户
userService.createUser(user);
}
}
拓展 @ResponseBody 和 RequestBody
发现这里用了一个@RequestBody 和前面提到的 RequestBody 有点像
前面得知 RestController 是 Controller 和 responseBody 的组合
而不是requestbody 貌似responsebody和requestbody又是一对共轭的操作 responsebody 将网页的json数据转变为java能处理的类对象数据 requestbody将java函数返回的数据
转换成json一类的数据 让前端浏览器能够处理
@RestController
- 定义:
@RestController是一个组合注解,它结合了@Controller和@ResponseBody。 - 作用: 用于标识一个控制器类,这个类主要用于处理 RESTful API 的请求。它自动将返回值序列化为 JSON 格式,并写入 HTTP 响应体。
@ResponseBody
- 定义:
@ResponseBody用于指示 Spring 将控制器方法的返回值直接写入 HTTP 响应体。 - 作用: 当你在方法上使用
@ResponseBody,Spring 会将返回的对象(如 Java 对象)自动转换为 JSON,并返回给客户端。@RestController中的所有方法默认都应用了这个功能。
@RequestBody
- 定义:
@RequestBody用于指示 Spring 将 HTTP 请求体中的内容转换为 Java 对象。 - 作用: 当你在方法参数上使用
@RequestBody,Spring 会将请求体中的 JSON 数据解析为相应的 Java 对象。通常用于处理客户端发送的请求数据,比如创建新用户时传送的用户信息。
关系总结
- 请求处理:
@RequestBody: 从 HTTP 请求体中读取数据,将其解析为 Java 对象,供后端逻辑使用。
- 响应处理:
@ResponseBody(通过@RestController实现): 将 Java 对象转换为 JSON,并写入 HTTP 响应体,返回给前端。
@RestController
public class UserController {
// 处理 POST 请求,使用 @RequestBody 将 JSON 转换为 User 对象
@PostMapping("/users")
public void createUser(@RequestBody User user) {
// 使用 User 对象执行创建逻辑
userService.createUser(user);
}
// 处理 GET 请求,返回 User 对象
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Integer id) {
User user = userService.getUserById(id);
return user; // 自动转换为 JSON
}
}
貌似使用@RestController 、@GetMapper 、@PostMapper、@RequestBody就可以基本上处理好http的请求和post请求了
另外还有些常用的关于处理http请求的注解
Other
1. 其他 HTTP 方法的注解
@PutMapping: 用于处理 HTTP PUT 请求,通常用于更新现有资源。
@PutMapping("/users/{id}")
public void updateUser(@PathVariable Integer id, @RequestBody User user) {
userService.updateUser(id, user);
}
@DeleteMapping: 用于处理 HTTP DELETE 请求,通常用于删除资源。
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Integer id) {
userService.deleteUser(id);
}
2. 请求参数和路径变量
-
@RequestParam: 用于获取 URL 查询参数。@GetMapping("/users") public List<User> getUsers(@RequestParam(required = false) String username) { return userService.getUsersByUsername(username); } -
@PathVariable: 用于获取 URL 路径中的变量。
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Integer id) {
return userService.getUserById(id);
}
3. 请求头
-
@RequestHeader: 用于获取请求头中的信息。@GetMapping("/users") public List<User> getUsers(@RequestHeader("Authorization") String authToken) { // 处理 Authorization 头 }
4. 响应处理
@ResponseStatus: 用于设置响应的状态码。
@PostMapping("/users")
@ResponseStatus(HttpStatus.CREATED)
public void createUser(@RequestBody User user) {
userService.createUser(user);
}
5. 处理异常
@ExceptionHandler: 用于定义处理特定异常的方法,可以在控制器内部或全局控制器上使用。
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
6. 跨域资源共享(CORS)
@CrossOrigin: 用于处理跨域请求,允许指定的域名访问你的 API。
@CrossOrigin(origins = "http://example.com")
@GetMapping("/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
7. 文件上传
-
@RequestParam: 可以用于处理文件上传。@PostMapping("/upload") public void uploadFile(@RequestParam("file") MultipartFile file) { // 处理文件上传 }
项目分区导航: 加密原理 ⬅️ | 06-处理http请求的注解 | ➡️ 新涉及到的注解 @Override @Autowired
💬 评论