@Valid @Validated @BindingResult的使用

非常好用的注解:@BindingResult
BindingResult使用起来很简单,一般在controller中使用

作用:用于对前端穿进来的参数进行校验,省去了大量的逻辑判断操作

@Valid @Validated这两个注解都需要与@BindingResult配套使用

关于@Valid和Validated的比较

@Valid是使用hibernate validation的时候使用

@Validated 是只用spring Validator 校验机制使用

一:@Validated 是只用spring Validator 校验机制使用

@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。

使用的注解是javax.validation.constraints包里面的

二:@Valid是使用hibernate validation的时候使用

@Valid

看看下面的依赖就知道,java的JSR303声明了这类接口,然后hibernate-validator对其进行了实现。

使用的校验注解是hibernate-validator

相关的校验注解:
空检查
@NotEmpty:用在集合类上面;不能为null,而且长度必须大于0
@NotBlank: 用在String上面;只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
@NotNull:用在基本类型上;不能为null,但可以为empty。

长度检查
@Size(min=,max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
不要错用了异常类型,比如在int上不可用@size
@Length(min=, max=) : 只适用于String 类型

Booelan检查
@AssertTrue: 验证 Boolean 对象是否为 true
@AssertFalse: 验证 Boolean 对象是否为 false

日期检查
@Past: 验证 Date 和 Calendar 对象是否在当前时间之前
@Future: 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern: 验证 String 对象是否符合正则表达式的规则

其他验证:
@Vaild 递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验
@Email 用于验证一个字符串是否是一个合法的右键地址,空字符串或null算验证通过
@URL(protocol=,host=,port=,regexp=,flags=) 用于校验一个字符串是否是合法URL

数值检查
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为"" 时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min: 验证 Number 和 String 对象是否大等于指定的值
@Max: 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax: 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin: 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits: 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=): 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

项目使用中遇到的问题:

一开始传入的参数没有使用@Validated 修饰,结果绑定不起作用,参数校验不成功,加上此注解即可生效。
所以BingdingResult是要与@Validated同时使用的。
 

使用示例

@RequestMapping("save")
    public String save( @Valid User user,BindingResult result) {
    //
    if(result.hasErrors()){
        List<ObjectError> ls=result.getAllErrors();
        for (int i = 0; i < ls.size(); i++) {
            System.out.println("error:"+ls.get(i));
        }
    }
    return "adduser";
}
if(br.hasErrors()) {
    //如果有错误直接跳转到add视图
    FieldError fieldError= br.getFieldError();
    System.out.println(fieldError.getDefaultMessage());

    List<FieldError> list = br.getFieldErrors();
    for (FieldError fieldError2 : list) {
        System.out.println(fieldError2.getDefaultMessage());
    }
    List<ObjectError> ls=br.getAllErrors();
    for (int i = 0; i < ls.size(); i++) {
        System.out.println("error:"+ls.get(i).getDefaultMessage());
    }
    return "user/add";
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值