【参数校验框架】@Validated 嵌套校验的使用

一、场景说明
  • 嵌套校验,指的是在一个 Bean 对象中的某个属性值也是一个 Bean 对象,这个子的属性值中的属性也需要校验,这种场景就属于嵌套校验

  • 在上述对嵌套校验多解说,我们在日常多软件开发过程中,也经常会遇到这样的场景

二、校验场景
  • 查询订单商品信息

  • 订单对象中包含商品信息

  • 在请求接口的时候需要对订单属性进行校验的同时也需要校验商品信息

三、框架使用
  1. 定义请求 Bean

    @Data
    @ToString
    public class Order implements Serializable {
        private static final long serialVersionUID = 784930215432L;
    
        /** 订单号*/
        private int id;
    
        /** 订单名称*/
        @NotNull(message = "订单名称不能为空")
        private String orderName;
    
        /** 订单状态
            定制化注解,支持参数值与指定类型数组列表值进行匹配(缺点是需要将枚举值写死在字段定义的注解中)*/
        @EnumValidated(strValues = {"FAIL", "PAYED"}, message = "只能查询指定状态的订单信息-1")
        private String orderState;
    
        /** 订单状态枚举
            定制化注解,实现参数值与枚举列表的自动匹配校验(能更好地与实际业务开发匹配)*/
        @EnumValidated(enumValues = OrderStateEnum.class, message = "只能查询指定状态的订单信息-2")
        private String orderStateEnum;
    
        /** 商品列表*/
        @Valid
        private List<Goods> goodsList;
    }   
    
    @Data
    @ToString
    public class Goods implements Serializable {
    
        private static final long serialVersionUID = 67493246372918L;
    
        /** 自增ID*/
        private String id;
    
        /** 商品ID*/
        @NotNull(message = "商品ID不能为空")
        private String goodsId;
    
        /** 商品名称*/
        @NotNull(message = "商品名称不能为空")
        private String goodName;
    }
    
  2. 创建控制层并对嵌套 Bean 进行校验

    @PostMapping("/order")
    @ApiOperation(value = "订单查询", notes = "订单查询,校验嵌套校验和自定义校验注解,抛出异常由统一异常处理")
    public DataResult orderList(@RequestBody @Validated Order order) {
        log.info("The oder request is {}", order.toString());
        return DataResult.success();
    }
    
  3. 模拟请求参数

    {
      "goodsList": [
        {
          "goodName": "string",
          "id": "string"
        }
      ],
      "id": 0,
      "orderName": "string",
      "orderState": "FAIL1",
      "orderStateEnum": "PAYED"
    }
    
  4. 校验响应结果

    {
      "code": 10009,
      "msg": "商品ID不能为空;只能查询指定状态的订单信息-1;",
      "detail": null,
      "data": null
    }    
    
  5. 特别提示,如果对象模型中存在子模型,那么对与子模型的校验则需要加上 @Valid 注解

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值