ResponseEntity - Spring框架的“标准回复模板“
@PostMapping("/save")public ResponseEntity<Map<String, Object>> saveMealRecord(@RequestBody MealRecordRequest request) {logger.info("收到保存餐饮记录请求: {}", request);logger.info("请求详情 - 日期: {}, 早饭: {}, 午饭: {}, 晚饭: {}, 零食: {}, 饮料: {}, 动态项目: {}", request.getRecordDate(), request.getBreakfast(), request.getLunch(), request.getDinner(), request.getSnack(), request.getDrink(), request.getCustomItems());
ResponseEntity不是Java原生的,而是Spring框架提供的类,就像:
1. Spring的"包装盒"
- 作用:把数据、状态码、响应头打包成一个完整的HTTP响应
- 位置:org.springframework.http.ResponseEntity
- 类比:就像快递盒,里面装数据,外面贴标签(状态码)
2. 为什么需要它?
原生Java只能返回数据,但HTTP响应需要三样东西:
- 数据(body)
- 状态码(200、400、500等)
- 响应头(Content-Type等)
ResponseEntity就是Spring提供的"三合一包装盒"
3. 实际使用
// 成功回复
return ResponseEntity.ok(response); // 200状态码 + 数据// 错误回复
return ResponseEntity.badRequest().body(response); // 400状态码 + 错误信息
return ResponseEntity.internalServerError().body(response); // 500状态码 + 错误信息
4. 等价写法对比
// 使用ResponseEntity(推荐)
return ResponseEntity.ok(response);// 原生写法(复杂)
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<>(response, headers, HttpStatus.OK);
5. Spring框架的便利性
就像餐厅提供"标准套餐":
- 不用自己配菜(不用手动设置状态码)
- 不用自己装盘(不用手动设置响应头)
- 直接点餐(直接调用方法)
ResponseEntity就是Spring给开发者提供的"标准回复套餐"!