使用注解@Validated、@Valid和BindingResult对入参进行校验

2023年6月4日09:05:49

使用注解@Validated、@Valid和BindingResult对入参进行校验

常见校验注解

使用注解@Validated、@Valid和BindingResult对入参进行校验

一般常用

@NotNull 常用于数值类型
@NotBlank 用于字符串类型 校验时会去除前后空字符串
@NotEmpty 可用于字符串(不同于NotBlank,不会去除空格),数组,集合,map等

@Valid和@Validated 区别

@Valid:没有分组校验的功能。
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
@Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制
@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能
如A类中引用B类,且A、B二类都有内部校验,为了使B类也生效,在A类中引用B类时,在B类变量上加@Valid注解,如果B类为集合等类型且不能为空还需要再加@NotEmpty

BindingResult

BindingResult用在实体类校验信息返回结果绑定。
该类作为方法入参,要写在实体对象后面,如下

    @PostMapping("/createHssNums")
    @ApiOperation(value = "新增数字", notes = "<br>开发人:常晓东<br>时间:2021/11/22<br>新增,存中已存在时,不允许新增")
    public ResponseData createHssNums(@RequestBody @Validated(NumSaveVO.CreateGroup.class) ValidList<NumSaveVO> Nums, BindingResult bindingResult) throws Exception {
        if (bindingResult.hasErrors()) {
            return ResponseData.fail("验证不通过", StatusCode.DATAERROR).setData(super.getListValidatedResult(bindingResult));
        }
        NumImportResultVO resultVO = iNumService.createBatch(Nums);
        if (resultVO.hasError()) {
            return ResponseData.fail(resultVO.getErrMsg(), StatusCode.DATAERROR).setData(resultVO);
        }
        return ResponseData.ok();

此代码使用了分组校验,如果新增时不需要传入id,而修改时需要传入id那么要对该实体类中的id字段进行分组校验,分组校验一般有两种:1.自定义注解;2.接口方式;本人采用第二种方式,只需要编写两个分组接口,接口中不需要任何代码在实体类校验注解中写入groups ={接口} 便可以分组校验。
注意:如果使用了分组校验,那么实体类中swagger的 @ApiModelProperty(value = “ID”, required = true)注解中的required = true将失效。
或者

    @PostMapping("/a")
    @ApiOperation(value = "测试", notes = "")
    public void test(@RequestBody @Valid TestEntity test,BindingResult bindingResult) {
        System.out.println(test.toString());
        if (bindingResult.hasErrors()) {
            throw new 自定义Exception("错误提示码",bindingResult.getFieldError().getDefaultMessage());
        }
    }

bindingResult.hasErrors() 判断是否校验通过,未通过bindingResult.getFieldError().getDefaultMessage()获取在TestEntity的属性设置的自定义message,如果没有设置,则返回默认值"javax.validation.constraints.XXX.message"。

  • 作者:changXiaoDong.
  • 原文链接:https://blog.csdn.net/sANsHiErHuA/article/details/122231406
    更新时间:2023年6月4日09:05:49 ,共 1795 字。