栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用注解@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"。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号