客户端发起请求
POST /api/users/register
Content-Type: application/json
{ "username": "张三", "email": "zhangsan@example.com", "password": "123456" }
↓ 请求到达
Controller 接收并解析请求
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping("/register")
public ResponseEntity<UserDTO> register(
@RequestBody @Valid UserRegisterRequest request) {
UserDTO user = userService.register(request);
return ResponseEntity.ok(user);
}
}
↓ 参数校验 + 调用
参数校验(Controller 的职责之一)
public class UserRegisterRequest {
@NotBlank(message = "用户名不能为空")
@Size(min = 2, max = 20) private String username;
@Email(message = "邮箱格式不正确") private String email;
@Size(min = 6, message = "密码至少6位") private String password;
}
为什么校验要放在 Controller?
- 第一道防线:尽早拦截非法请求
- 减轻下游压力:Service 层可以假设数据已清洗
- 关注点分离:Service 专注于业务,不处理格式验证
↓ 返回结果
Controller 封装响应返回
HTTP/1.1 200 OK
{ "code": 200, "message": "注册成功",
"data": { "id": 10001, "username": "张三", "email": "zhangsan@example.com" } }