Controller 校验与统一响应
Controller 层负责接收请求、参数校验、调用 Service 和返回统一响应。你需要掌握 @Validated 校验和 RespInfo 响应规范。
Controller 定义
java
@RestController
@RequestMapping("/biz/order")
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping("/page")
@SaCheckPermission("biz:order:list")
public RespInfo page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
OrderQueryDTO query
) {
return RespInfo.success(orderService.page(query, pageNum, pageSize));
}
}参数校验
DTO 字段校验
java
@Data
public class OrderDTO {
@NotBlank(message = "订单号不能为空")
@Size(max = 64, message = "订单号长度不能超过64")
private String orderNo;
@NotNull(message = "金额不能为空")
@Min(value = 1, message = "金额必须大于0")
private Long amount;
@NotBlank(message = "状态不能为空")
private String status;
}Controller 校验
java
@PostMapping
@SaCheckPermission("biz:order:add")
public RespInfo add(@Validated @RequestBody OrderDTO dto) {
return RespInfo.success(orderService.create(dto));
}
@PutMapping
@SaCheckPermission("biz:order:edit")
public RespInfo edit(@Validated @RequestBody OrderDTO dto) {
return RespInfo.success(orderService.update(dto));
}分组校验
java
public interface Add {}
public interface Edit {}
@Data
public class OrderDTO {
@NotNull(groups = Edit.class, message = "修改时ID不能为空")
private Long id;
@NotBlank(groups = {Add.class, Edit.class}, message = "订单号不能为空")
private String orderNo;
}
// Controller 指定校验组
@PostMapping
public RespInfo add(@Validated(Add.class) @RequestBody OrderDTO dto) { ... }
@PutMapping
public RespInfo edit(@Validated(Edit.class) @RequestBody OrderDTO dto) { ... }统一响应
java
// 成功
return RespInfo.success(data);
// 成功(无数据)
return RespInfo.success();
// 失败
return RespInfo.error("订单号已存在");
// 失败(带错误码)
return RespInfo.error(500, "系统异常");响应格式:
json
{
"code": 200,
"msg": "操作成功",
"data": {}
}权限控制
java
@GetMapping("/page")
@SaCheckPermission("biz:order:list") // 查询权限
public RespInfo page() { ... }
@PostMapping
@SaCheckPermission("biz:order:add") // 新增权限
public RespInfo add() { ... }
@DeleteMapping("/{id}")
@SaCheckPermission("biz:order:remove") // 删除权限
public RespInfo remove(@PathVariable Long id) { ... }RESTful 接口
| 操作 | 方法 | 路径 | 权限 |
|---|---|---|---|
| 分页 | GET | /biz/order/page | biz:order:list |
| 详情 | GET | /biz/order/{id} | biz:order:query |
| 新增 | POST | /biz/order | biz:order:add |
| 修改 | PUT | /biz/order | biz:order:edit |
| 删除 | DELETE | /biz/order/{id} | biz:order:remove |
分页参数
java
@GetMapping("/page")
public RespInfo page(
@RequestParam(defaultValue = "1") Integer pageNum, // 必须 pageNum,不能用 page
@RequestParam(defaultValue = "10") Integer pageSize,
OrderQueryDTO query
) {
return RespInfo.success(orderService.page(query, pageNum, pageSize));
}API 加密
敏感接口添加加解密注解:
java
@PostMapping("/save")
@ApiDecrypt // 解密请求体
@ApiEncrypt // 加密响应体
public RespInfo save(@RequestBody OrderDTO dto) {
return RespInfo.success(orderService.save(dto));
}