@Valid的使用

案例1:

@Data
public class TestValidVo implements Serializable {

    @NotNull(message = "id不能为空")
    private Integer id;

    @NotEmpty(message = "param不能为空")
    private Integer param;

}
/**
     * 这种写法参数校验未生效
     */
    @PostMapping("testList1")
    public R<?> testList1( @Validated @RequestBody List<TestValidVo> validVos){
        System.out.println(JSONUtil.toJsonStr(validVos));
        return R.ok();
    }

案例2:

@Data
public class TestValidVo implements Serializable {

    @NotNull(message = "id不能为空")
    private Integer id;

    @NotEmpty(message = "param不能为空")
    private Integer param;

}
/**
     * 这种写法参数校验未生效
     */
    @PostMapping("testList2")
    public R<?> testList2(@Valid @RequestBody List<TestValidVo> validVos){
        System.out.println(JSONUtil.toJsonStr(validVos));
        return R.ok();
    }

案例1和案例2是对List集合中的子元素校验,校验未生效。

案例3:

@Data
public class TestValidVo implements Serializable {

    @NotNull(message = "id不能为空")
    private Integer id;

    @NotEmpty(message = "param不能为空")
    private Integer param;

}

/**
     * 校验可以生效
     */
    @PostMapping("testModel1")
    public R<?> testModel1(@RequestBody @Valid  TestValidVo validVo){
        System.out.println(JSONUtil.toJsonStr(validVo));
        return R.ok();
    }

案例4:

@Data
public class TestValidVo2 implements Serializable {

    @NotNull(message = "id不能为空")
    private String id;

    // 注意:这儿使用 import org.hibernate.validator.constraints.NotEmpty 而不是javax.validation.constraints.NotEmpty,
    // 使用javax.validation.constraints.NotEmpty会报错:javax.validation.UnexpectedTypeException:
    // HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.String'.
    @NotEmpty(message = "param不能为空")
    private String param;

}

/**
     * 校验可以生效
     * 这块是要注意使用注释时org.hibernate.validator.constraints.NotEmpty 而不是javax.validation.constraints.NotEmpty
     */
    @PostMapping("testModel2")
    public R<?> testModel2(@RequestBody @Valid TestValidVo2 validVo){
        System.out.println(JSONUtil.toJsonStr(validVo));
        return R.ok();
    }

案例5:

/**
     * 校验可以生效
     *  注解 @Valid 和 @Validated 都可以生效
     */
    @PostMapping("testModel3")
    public R<?> testModel3(@RequestBody @Validated TestValidVo2 validVo){
        System.out.println(JSONUtil.toJsonStr(validVo));
        return R.ok();
    }

案例3和案例4对子类直接校验,可以生效。

案例4是为了说明使用NotEmpty注释时,注意使用org.hibernate.validator.constraints.NotEmpty而不是javax.validation.constraints.NotEmpty。

案例3和案例5对比,说明在修饰方法参数时,@Valid和@Validated效果时一致的。

案例6:

@Data
public class TestValidListVo implements Serializable {

    private List<TestValidVo> validVos;

}

/**
     * 校验不生效
     */
    @PostMapping("testList3")
    public R<?> testList3(@RequestBody @Valid TestValidListVo validListVo){
        System.out.println(JSONUtil.toJsonStr(validListVo));
        return R.ok();
    }

案例7:

@Data
public class TestValidList4Vo implements Serializable {

    @Valid
    private List<TestValidVo> validVos;

}
/**
     * 校验可以生效
     */
    @PostMapping("testList4")
    public R<?> testList4(@RequestBody @Valid TestValidList4Vo validListVo){
        System.out.println(JSONUtil.toJsonStr(validListVo));
        return R.ok();
    }

案例6和案例7是属于嵌套验证,案例6没有在成员属性list上添加@Valid修饰,校验未生效。

案例7在成员属性list上添加了@Valid,最后校验生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值