SpringBoot HTTP请求处理
SpringBoot 基于 Spring MVC 处理 HTTP 请求,提供便捷的 RESTful API 开发能力。
RESTful接口定义
Java
@RestController
@RequestMapping("/api/users")
public class UserController {
// GET查询
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
// POST创建
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
// PUT更新
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
return userService.update(id, user);
}
// DELETE删除
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
// GET列表
@GetMapping
public List<User> listUsers() {
return userService.findAll();
}
}
请求参数绑定
路径参数
Java
@GetMapping("/users/{id}/orders/{orderId}")
public Order getOrder(
@PathVariable Long id,
@PathVariable("orderId") Long oid) {
return orderService.findById(id, oid);
}
查询参数
Java
@GetMapping("/users")
public Page<User> listUsers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) String name) {
return userService.findAll(page, size, name);
}
请求体
Java
@PostMapping("/users")
public User createUser(@RequestBody UserDTO dto) {
return userService.save(dto);
}
// 多个请求体参数
@PostMapping("/orders")
public Order createOrder(
@RequestBody OrderDTO order,
@RequestBody(required = false) List<ItemDTO> items) {
return orderService.create(order, items);
}
表单参数
Java
@PostMapping("/login")
public Result login(
@RequestParam String username,
@RequestParam String password) {
return authService.login(username, password);
}
// 多个表单参数绑定对象
@PostMapping("/register")
public User register(@ModelAttribute UserForm form) {
return userService.register(form);
}
参数注解对比
| 注解 | 来源 | 示例 |
|---|---|---|
| @PathVariable | URL路径 | /users/{id} |
| @RequestParam | URL查询参数 | ?name=test |
| @RequestBody | 请求体JSON | {"name":"test"} |
| @ModelAttribute | 表单参数 | form提交 |
响应格式控制
Java
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
if (user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok()
.header("X-Custom", "value")
.body(user);
}
// 状态码控制
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User created = userService.save(user);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(created);
}
统一响应格式
Java
public class Result<T> {
private int code;
private String message;
private T data;
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>();
result.code = 200;
result.message = "success";
result.data = data;
return result;
}
public static <T> Result<T> error(int code, String message) {
Result<T> result = new Result<>();
result.code = code;
result.message = message;
return result;
}
}
// 使用
@GetMapping("/users/{id}")
public Result<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return Result.success(user);
}
全局异常处理
Java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public Result<Void> handleNotFound(ResourceNotFoundException e) {
return Result.error(404, e.getMessage());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<Void> handleValidation(MethodArgumentNotValidException e) {
String message = e.getBindingResult()
.getFieldErrors()
.stream()
.map(FieldError::getDefaultMessage)
.collect(Collectors.joining(","));
return Result.error(400, message);
}
@ExceptionHandler(Exception.class)
public Result<Void> handleException(Exception e) {
return Result.error(500, "服务器内部错误");
}
}
参数校验
Java
@Data
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String username;
@Email(message = "邮箱格式不正确")
private String email;
@Min(value = 18, message = "年龄必须大于18")
private Integer age;
@Size(min = 6, max = 20, message = "密码长度6-20位")
private String password;
}
// Controller启用校验
@PostMapping("/users")
public User createUser(@Valid @RequestBody UserDTO dto) {
return userService.save(dto);
}
校验需添加依赖:spring-boot-starter-validation
HTTP方法映射
| 注解 | HTTP方法 | 用途 |
|---|---|---|
| @GetMapping | GET | 查询资源 |
| @PostMapping | POST | 创建资源 |
| @PutMapping | PUT | 更新资源 |
| @DeleteMapping | DELETE | 删除资源 |
| @PatchMapping | PATCH | 局部更新 |
要点总结
- @RestController = @Controller + @ResponseBody
- @PathVariable取路径参数,@RequestParam取查询参数
- @RequestBody绑定JSON请求体
- ResponseEntity可控制响应状态和头部
- 使用@Valid启用参数校验
📝 发现内容有误?点击此处直接编辑