全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

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);
}

参数注解对比

注解来源示例
@PathVariableURL路径/users/{id}
@RequestParamURL查询参数?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方法用途
@GetMappingGET查询资源
@PostMappingPOST创建资源
@PutMappingPUT更新资源
@DeleteMappingDELETE删除资源
@PatchMappingPATCH局部更新

要点总结

  • @RestController = @Controller + @ResponseBody
  • @PathVariable取路径参数,@RequestParam取查询参数
  • @RequestBody绑定JSON请求体
  • ResponseEntity可控制响应状态和头部
  • 使用@Valid启用参数校验

📝 发现内容有误?点击此处直接编辑

← 上一篇 SpringBoot内置容器概念
下一篇 → SpringBoot嵌入式容器与Web项目启动
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库