Java使用@Valid+BindingResult进行controller参数校验

Posted 一叶知秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java使用@Valid+BindingResult进行controller参数校验相关的知识,希望对你有一定的参考价值。

@Valid

@Valid注解用于校验,所属的包: javax.validation.Valid.

你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能。

## 空检查

@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 对象是否符合正则表达式的规则

##  数值检查

建议使用在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指定小数精度。

BindingResult 

Spring验证的错误返回 

@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱
 
 1.首先在参数实体类上面加上相关的验证信息
public class PublicUserForm implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 手机号
     */
    @NotBlank(message = "{required}")
    @Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}")
    private String telephone;

    /**
     * 密码
     */
    private String password;

  2.controller层

 public ResponseResult regist(@Valid PublicUserForm publicUserForm, BindingResult bindingResult) throws Exception {

        //在这里,我们判断参数是否通过校验
        if (bindingResult.hasErrors()) {
            Map<String,String> errorMsg = new HashMap<>();
            for (FieldError item:bindingResult.getFieldErrors()) {
                errorMsg.put(item.getField(),item.getDefaultMessage());
            }
            //自定义的返回,并将错误信息返回
            return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg);
        }

        PublicUser publicUser = publicUserService.regist(publicUserForm);
        return new ResponseResult(true,200,"访问成功!",null);
    }

 

 

以上是关于Java使用@Valid+BindingResult进行controller参数校验的主要内容,如果未能解决你的问题,请参考以下文章

Java中的参数校验

Java中的参数校验

Java 校验注解@NotNull,@NotBlank,@Max,@Valid等注解简单使用

别再乱用了,这才是 @Validated 和 @Valid 的真正区别!!!

LeetCode算法题-Valid Perfect Square(Java实现-四种解法)

2021-12-30 @valid @validted 区别和使用