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

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

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

使用注解@Validated、@Valid和BindingResult对入参进行校验
  • 常见校验注解
      • 一般常用
  • @Valid和@Validated 区别
  • 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 = "
开发人:常晓东
时间:2021/11/22
新增,存中已存在时,不允许新增") public ResponseData createHssNums(@RequestBody @Validated(NumSaveVO.CreateGroup.class) ValidList 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"。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5686149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存