Skip to content

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/pagebiz:order:list
详情GET/biz/order/{id}biz:order:query
新增POST/biz/orderbiz:order:add
修改PUT/biz/orderbiz: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));
}

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架