Bean Validation帮我们做了啥

261 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。数据校验一般分为前端校验,后端校验,绕过前端校验直接通过接口直接向后端发送请求,因此可以使用JSR303来实现后端的数据校验,只需要用简单的注解方式,即可完成数据校验,系统给定的校验注解如下,也可以指定自定义校验

  • Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用

  • Bean - Validation 或是你自己定义的 constraint,例如 @NotNull, @Max, @ZipCode, 就可以确保数据模型(JavaBean)的正确性。constraint 可以附加到字段,getter 方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。

校验器全局异常处理

在Controller的方法上声明参数BindingResult result可以捕获校验异常,但是如果每个controller都有异常需要捕获,代码十分冗余,因此可以定义全局异常校验处理类

值校验

@Null(message = "必须为null"):被注解的元素必须为null
@NotNull(message = "必须不为null"):被注解的元素必须不为null
@NotBlank(message = "必须不为空"):验证注解的元素值不为空(不为null、去除首位空格后长度为0) ,并且类型为String。
@NotEmpty(message = "必须不为null且不为空"):验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) ,并且类型为String。
@AssertTrue(message = "必须为true"):被注解的元素必须为true,并且类型为boolean。
@AssertFalse(message = "必须为false"):被注解的元素必须为false,并且类型为boolean。

范围校验

@Min(value = 18, message = "必须大于等于18"):被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double。
@Max(value = 18, message = "必须小于等于18"):被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double。
@DecimalMin(value = "150", message = "必须大于等于150"):验证注解的元素值大于等于@DecimalMin指定的value值,并且类型为BigDecimal。
@DecimalMax(value = "300", message = "必须大于等于300"):验证注解的元素值小于等于@DecimalMax指定的value值 ,并且类型为BigDecimal。
@Range(max = 80, min = 18, message = "必须大于等于18或小于等于80"):验证注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,byte,short,int,long。
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Past(message = "必须为过去的时间"):被注解的元素必须为过去的一个时间,并且类型为java.util.Date。
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Future(message = "必须为未来的时间"):被注解的元素必须为未来的一个时间,并且类型为java.util.Date。

长度校验

@Size(max = 11, min = 7, message = "长度必须大于等于7或小于等于11"):被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map。

@Length(max = 11, min = 7, message = "长度必须大于等于7或小于等于11"):验证注解的元素值长度在min和max区间内 ,并且类型为String。

格式校验

@Digits(integer=3,fraction = 2,message = "整数位上限为3位,小数位上限为2位"):验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
@Pattern(regexp = "\\d{11}",message = "必须为数字,并且长度为11"):被注解的元素必须符合指定的正则表达式,并且类型为String。
@Email(message = "必须是邮箱"):验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式,类型为String。

END