javaBean验证框架(6)—附加约束和组合约束
来源:互联网 发布:网络通信安全员证书 编辑:程序博客网 时间:2024/05/21 06:21
javaBean验证框架(6)—附加约束和组合约束
除了前文中列出规范中内置的约束外,Hibernate也附加了一些常用约束。
Hibernate附加约束
除了
@ScriptAssert
是类级约束,其他都是字段级约束。这里仅列举部分常用约束。
@CreditCardNumber(ignoreNonDigitCharacters=)
根据Luhn算法(模10算法)验证输入合法性。目标是避免用于输入错误,不是信用卡的有效性。
ignoreNonDigitCharacters
默认为false,是否忽略非数字字符。@Email
检查字符串是否为合法的email地址。可选的参数
regexp
和flags
允许知道额外的验证表达式(包括表达式标志)。仅应用域字符串。@Length
检查验证值字符串序列长度是否在
min
和max
(包括)之间。支持类型仅为CharSequence
。@NotBlank
检查验证值(注解的字符串序列)不null,且去除前后空格后长度大于0.与
@NotEmpty
的区别是,仅能应用在字符串验证,前后空格被忽略。@NotEmpty
检查验证值是否不null且空(empty)。支持类型包括
CharSequence, Collection, Map and arrays
。@Range
检查注解值/验证值是否位于(包括)给定的最小值和最大值之间。支持类型包括
BigDecimal, BigInteger, CharSequence, byte, short, int, long
及相应的包装类。@SafeHtml
检查验证值是否包括潜在的恶意代码,如
<script/>
。需要jsoup
库支持。@ScriptAssert(lang=, script=, alias=, reportOn=)
检查给定脚本是否能成功计算,需要JSR 223规范中定义的java script api 实现引擎支持。script可以规范支持的任何语言脚本。即使属于类级别验证,
reportOn
可以指定特定的属性作为报告违法约束信息路径。@URL(protocol=, host=, port=, regexp=, flags=)
根据 RFC2396规范验证是否为合法的URL.
组合约束
在一些复杂的场景,验证值需要多个约束同时使用,会让人感动过于复杂且啰嗦,如果相同的字段被其他类引用,则相应的约束需完全被拷贝至其他类,这违背了DRY原则(In software engineering, don’t repeat yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds.)。
为了解决这个问题,我们可以通过多个基本的约束组合创建更高级别的约束。示例代码如下:
@NotNull@Size(min = 2, max = 14)@CheckCase(CaseMode.UPPER)@Target({ METHOD, FIELD, ANNOTATION_TYPE })@Retention(RUNTIME)@Constraint(validatedBy = { })@Documented@ReportAsSingleViolationpublic @interface ValidLicensePlate { String message() default "{org.hibernate.validator.referenceguide.chapter06." + "constraintcomposition.ValidLicensePlate.message}"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { };}
创建组合约束,仅需要组合其他约束即可,如果组合约束需要验证器,通过@Constraint
指定,反之,无需指定,如上代码所示:@Constraint(validatedBy = { })
。
注解@ReportAsSingleViolation
使任何组合验证违反时,仅作为单一错误信息。使用和之前的使用方式一致。
总结
本文介绍了Hibernate内置的常用注解,以及如何定义组合注解,简化复杂业务验证。
- javaBean验证框架(6)—附加约束和组合约束
- javaBean验证框架(4)—自定义约束
- javaBean验证框架(5)—自定义类级别约束
- 组合约束
- javaBean vlidation(2)—内置约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- 约束
- mybatis的理解
- ionic providers的使用
- 中间件的理解
- springboot+maven+springdata jpa +querydsl快速实现增删改查分页
- 手机网上商城-项目经验总结(二)-创建项目结构
- javaBean验证框架(6)—附加约束和组合约束
- 手机网上商城-项目经验总结(三)-QueryRunner
- HDU5514 Frogs (gcd + 容斥原理)
- 1.1基本算法举例(上篇)
- 2412. 【NOI2005】瑰丽华尔兹
- STL map
- 2017.10.7离线赛总结
- 手机网上商城-项目经验总结(四)-BaseServlet类
- 设计模式之享元模式(1)