美文网首页
Spring Bean验证

Spring Bean验证

作者: 夏与清风 | 来源:发表于2019-07-27 22:32 被阅读0次

当需要处理一个应用程序的业务逻辑时,数据校验是必须要进行的,应用程序必须通过某种手段来确保输入的数据在语义上是正确的。通常应用程序是分层的,同样的数据验证逻辑可能会出现在不同的层中,此时就会导致代码冗余等问题。为避免此问题,最好将验证逻辑与相应的域模型进行绑定。

Bean Validation为Javabean验证定义了相应的元数据模型和API。默认的元数据是Java Annotations,通过使用XML可以对原有的元数据信息进行覆盖和扩展。在程序中可以通过Bean Validation或自定义的constraint(如@NotNull、@Max、@ZipCode),就可以确保数据模型的正确性。constraint可以附加到字段、getter方法、类或接口上。对于一些特定的需求,可以很容易的开发定制化的constraint。

Bean Validation是一个运行时的数据验证框架,验证后的错误会立马返回。

1、Bean验证

spring框架支持Bean Validation1.0和Bean Validation1.1,也支持spring Validator接口。spring应用程序可以选择全局启用bean验证,并专门用于所有验证需求。还可以为每个DataBinder实例注册额外的spring Validator实例,对于插入验证逻辑而不使用注解的情况可能会有用。

Bean Validation的内置约束:

\bullet @AssertFalse

用于约束字段或属性值必须是false。

@AssertFalse

boolean isSupport;

\bullet @AssertTrue

用于约束字段或属性值必须是true。

@AssertTrue

boolean isSupport;

\bullet @DecimalMax

用于约束字段或属性值必须是一个decimal类型的值,且值的大小必须小于或等于注解中的元素值。

@DecimalMax("10.00")

BigDecimal price;

\bullet @Digits

用于约束字段或属性值必须是指定范围内的数字。整数元素指定数字的最大整数,而小数元素指定数字的最大小数位数。

@Digits(integer=5,fraction=2)

BigDecimal price;

\bullet @Future

用于约束字段或属性值必须是将来的日期。

@Future

Date endTime;

\bullet @Max

用于约束字段或属性值必须是一个integer类型的值,且值的大小必须小于或等于注解中的元素值。

@Max(10)

int count;

\bullet @Min

用于约束字段或属性值必须是一个integer类型的值,且值的大小必须大于或等于注解中的元素值。

@Min

int count;

\bullet @NotNull

用于约束字段或属性值不能为空。

@NotNull

String name;

\bullet @Null

用于约束字段或属性值必须为空。

@Null

String desc;

\bullet @Past

用于约束字段或属性值必须是以前的日期。

@Past

Date birthday;

\bullet @Pattern

用于约束字段或属性值必须是匹配正则表达式的定义。

@Pattern(regexp="\\(\\d{2}\\)\\d{3}-\\d{5}")

String number;

\bullet @Size

对字段或属性的大小进行评估,且必须与指定的边界匹配。如果字段或属性是String,则会评估字符串的大小,如果集合则会对集合的大小进行评估,如果是map则会对map的大小进行评估,如果是数组则会对数组的大小进行评估。

@Size(min=2,max=100)

String msg;

2、Validator接口

spring提供了一个可以用来验证对象的Validator接口,它使用了Errors对象,验证器在验证时可以将验证失败报告发给Errors对象。

User对象

通过实现org.springframework.validation.Validator接口的方法来为User类提供验证行为。

Validator接口

\bullet supports(Class<?> var1):验证是否支持所提供的类的实例。

\bullet validate(Object var1, Errors var2):验证给定的对象,并在验证出错误的时,将错误信息注册到给定的错误对象。

UserValidator实现类

ValidationUtils类的静态rejectIfEmpty()方法用于验证name属性,如果属性值为null或空字符串,则验证不通过或拒绝。

--参考文献《Srping5开发大全》

相关文章

网友评论

      本文标题:Spring Bean验证

      本文链接:https://www.haomeiwen.com/subject/dlyqrctx.html