02 Spring Validation
Spring 为了给开发者提供便捷,对 hibernate validation 进行了二次封装,显示校验 validated bean 时,可以使用 spring validation 或者 hibernate validation。
注解
JSR 提供的校验注解:
@Null
被注释的元素必须为 null
@NotNull
被注释的元素必须不为 null
@AssertTrue
被注释的元素必须为 true
@AssertFalse
被注释的元素必须为 false
@Min(value)
被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)
被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)
被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)
被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=)
被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)
被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past
被注释的元素必须是一个过去的日期
@Future
被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=)
被注释的元素必须符合指定的正则表达式
Hibernate Validator 提供的校验注解:
@NotBlank()
验证字符串非 null,且长度必须大于 0
被注释的元素必须是电子邮箱地址
@Length(min=,max=)
被注释的字符串的大小必须在指定的范围内
@NotEmpty
被注释的字符串的必须非空
@Range(min=,max=,message=)
被注释的元素必须在合适的范围内
首先定义 validated bean:
在 Controller 中使用:
@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上,且提供分组功能
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
如果有多个参数需要校验,形式可以如下,即一个校验类对应一个校验结果:
分组校验
如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验。
在 Controller 中使用,注意使用分组功能必须使用 @Validated 注解:
验证方式
验证请求体
验证请求体(RequestBody),需要验证的参数上加上了 @Valid 注解,如果验证失败,它将抛出 MethodArgumentNotValidException。默认情况下,Spring 会将此异常转换为 HTTP Status 400(错误请求)。
Controller:
ExceptionHandler:
验证请求参数
一定一定不要忘记在类上加上 Validated 注解了,这个参数可以告诉 Spring 去校验方法参数。
Controller:
ExceptionHandler:
验证 Service 方法
此外还可以验证任何 Spring 组件的输入,而不是验证控制器级别的输入,我们可以使用 @Validated 和 @Valid 注释的组合来实现这一需求。
一定一定不要忘记在类上加上 Validated 注解了,这个参数可以告诉 Spring 去校验方法参数。
自定义 Validator
验证枚举值
主要实现:
FlagFlagValidator
使用:
验证范围值
需求:Person 类有一个 region 字段,region 字段只能是 China、China-Taiwan、China-HongKong 这三个中的一个。
使用:
校验电话号码
使用:
最后更新于
这有帮助吗?