生活化讲解Controller - 餐厅的“前台接待员“
Controller - 餐厅的"前台接待员"
@RestController = 告诉Spring"这是一个接待员,专门处理客人的各种请求"
@RequestMapping("/api/meal") = 这个接待员负责"餐饮部门"的所有业务
@CrossOrigin(origins = "") = 允许任何地方的客人都能来这个餐厅
日志系统 - 餐厅的"监控摄像头"
Logger = 餐厅的监控系统,记录每个客人的行为
- logger.info() = 正常记录(客人点餐、结账等)
- logger.warn() = 警告记录(客人点错了菜)
- logger.error() = 错误记录(厨房出问题了)
依赖注入 - 餐厅的"员工调配"
@Autowired = Spring自动给接待员安排帮手
- MealRecordService = 后厨主管,负责具体的餐饮业务
API接口 - 餐厅的"服务窗口"
1. 测试窗口 - "餐厅是否营业"
@GetMapping("/test")
就像客人问"餐厅开门吗?"接待员回答"是的,我们正常营业"
2. 点餐窗口 - "我要点餐"
@PostMapping("/save")
@RequestBody MealRecordRequest request
- @PostMapping = 客人要下单(POST请求)
- @RequestBody = 客人把菜单(JSON数据)递给接待员
- 验证逻辑 = 接待员检查菜单是否合理(日期不能空、金额不能负数)
3. 查询窗口 - "我点的菜好了吗"
@GetMapping("/get/{date}")
@PathVariable String date
- @GetMapping = 客人询问(GET请求)
- @PathVariable = 客人说"我要查2024-01-15的订单"
4. 退菜窗口 - "我不要这个菜了"
@DeleteMapping("/delete/{date}")
- @DeleteMapping = 客人要取消订单(DELETE请求)
异常处理 - 餐厅的"应急预案"
try-catch = 接待员的应急处理能力
- IllegalArgumentException = 客人要求不合理(参数错误)
- Exception = 厨房出问题了(系统错误)
ResponseEntity = 接待员给客人的回复
- ResponseEntity.ok() = "好的,没问题"(200状态码)
- ResponseEntity.badRequest() = "抱歉,您的要求有问题"(400状态码)
- ResponseEntity.internalServerError() = "抱歉,我们系统出问题了"(500状态码)
统一响应格式 - 餐厅的"标准回复"
Map<String, Object> response = new HashMap<>();
response.put("success", true); // 是否成功
response.put("message", "保存成功"); // 回复消息
response.put("data", record); // 具体数据
就像餐厅统一的服务话术:"您好,您的订单已确认,这是您的订单号..."
为什么这样写?
分层架构 = 接待员只负责接待,具体做菜交给后厨(Service层)
统一处理 = 所有客人都用同样的服务流程
错误兜底 = 即使出问题,也要给客人一个合理的回复
日志记录 = 方便餐厅管理者了解经营情况
就像一家专业的餐厅,每个环节都有标准化的流程!