SpringBoot接口参数统一校验

网站建设5年前发布
12 0 0

20230306151109c800f5527ce128b8a2950709e47b770685ed89242,@Null 限制只能为null。,@NotNull 限制必须不为null。,@NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0。,@NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串。,@AssertFalse 限制必须为false。,@AssertTrue 限制必须为true。,@DecimalMax(value) 限制必须为一个不大于指定值的数字。,@DecimalMin(value) 限制必须为一个不小于指定值的数字。,@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction。,@Future 限制必须是一个将来的日期。,@Past 验证注解的元素值(日期类型)比当前时间早。,@Max(value) 限制必须为一个不大于指定值的数字。,@Min(value) 限制必须为一个不小于指定值的数字。,@Pattern(value) 限制必须符合指定的正则表达式。,@Size(max,min) 限制字符长度必须在min到max之间。,@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式。,@NotNull 适用于任何类型被注解的元素必须不能与NULL。,@NotEmpty 适用于String Map或者数组不能为Null且长度必须大于0。,@NotBlank 只能用于String上面 不能为null,调用trim()后,长度必须大于0。,请求:127.0.0.1:8080/validator/add?address=中国。,返回:检验通过。,请求:127.0.0.1:8080/validator/add。,返回:address不能为空。,说明:在进行单个参数校验时,一定要在Controler类上加@Validated注解,否则校验不会生效。,实体User类:,controller类:,执行如下:,20230306151109d29d0482759a80762c0526e402504111548838611,20230306151110911cf27276991e31c6d964c39f638d917142cf409,说明:如果采用BindingResult方式来存储异常结果,就必须自己来处理异常。即接口中有BindingResult参数,就必须使用要有上方7,8,9行代码进行异常处理,否则程序会正常执行。,实体User类,同上。controller类如下:,执行结果:,20230306151250f26c49524276937fe325615cf86304a5680e18592,这里没有采用BindingResult来存储异常,程序在这里会报错。可以在这个地方增加统一异常管理。通过报错信息可以知道需要对MethodArgumentNotValidException进行管理,代码如下:,再次执行:,20230306151114859522b043aaf640c77936e75fa360bba9724c689,检验器代码:,统一异常管理:,controller类如下:,执行如下:,202303061511140936f974658848c2c6d6631bd670f600946e70327,说明:这么做的好处是可以自由的对实体进行检验,与以上方式相比较为灵活。,同一个实体在不同的操作中的校验方式是不同的,这就要用到分组校验。比如实体User在新增操作时,id是没有的,但是在更新操作时id又必须存在。通过下面例子来讲解一下是如何实现的。,实体user:,统一异常:,controller类:,执行如下:,202303061512518921af128f22c98cfee5951c6e5f8973c8d4ec451,202303070148421639f3d322f46cacc24775200a3962edd0955b996,@Validated 对@Valid 进行了二次封装,但在分组、注解位置、嵌套验证等功能上有所不同。

© 版权声明

相关文章