好消息!
Bean Validation 现已进入最终草案阶段,并可在 JCP 网站上下载。Bean Validation 标准化了在对象图中定义、声明和验证约束的方式。通过使用注解,如@NotNull, @Email等,您只需在领域模型中表达一次约束(遵循DRY原则),然后让它们自动由应用程序的不同层进行验证。Bean Validation 还通过元数据查询API公开约束,这对于与Java之外交互的框架很有用,如javascript库或数据库模式生成器。
以下是该最终草案的主要亮点
- 类型安全的约束验证器
- XML配置和XML映射支持
- 更清晰的名字
- 集成到JPA 2和JSF 2
- 更多内置约束
类型安全的约束验证器
约束现在以类型安全的方式验证特定类型(如String和Collection)等。您甚至可以将多个ConstraintValidator实现与给定的约束相关联。每个ConstraintValidator都针对特定类型。
@Constraint(validatedBy = { SizeValidatorForString.class, SizeValidatorForCollection.class } ) public @interface Size { String message() default "{constraint.size}"; Class<?>[] groups() default {}; int min() default 0; int max() default Integer.MAX_VALUE; } public class SizeValidatorForString implements<Size, String> { public void initialize(Size size) {} public boolean isValid(String value, ConstraintValidatorContext context) {} } public class SizeValidatorForCollection implements<Size, Collection> { public void initialize(Size size) {} public boolean isValid(Collection value, ConstraintValidatorContext context) {} }
合适的ConstraintValidator由Bean Validation提供者自动选择。更好的是,IDE或注解处理器(请参阅此处的另一种用法)可以在您对不兼容类型的属性应用约束时警告您。
@Size //invalid usage of @Size Number number;
XML配置和映射
通过META-INF/validation.xml支持XML配置和XML映射(即使用XML而不是注解)。如果您感兴趣,请查看它并给我们反馈。如果需要,配置也可以完全通过程序完成,XML是可选的。
更清晰的名字
我们对所有类名进行了第二次审查,并进行了清理,特别是在引导API中。名称更加一致和清晰。
与JPA 2和JSF 2的集成
现在官方宣布,Bean Validation已经与JPA 2和JSF 2集成。更重要的是,它对您的应用程序无需进行任何配置。非常方便。查看JSF和JPA的规范以了解更多信息。
更多内置约束
我们增加了一些新的内置约束。@Pattern它通过正则表达式验证字符串。@DecimalMin和@DecimalMax它们使用BigDecimal风格的注释和范围来定义边界。@Min和@Max仍然用于整数边界。
@Pattern(regexp="[0-9]*") String number; @Max(500000) BigDecimal salary; @DecimalMax("27.5") BigDecimal luggageWeight;
反馈
进行了额外的次要和重大增强以及错误修复。有关更多详细信息,请参阅我们的JIRA变更日志。
自公开草案以来,我们一直在听取您的反馈,并对规范的当前状态感到非常满意。多做一点,阅读拟议的最终草案,并给我们更多的反馈(规范,论坛)。
您现在可以通过下载Hibernate Validator 4来使用Bean Validation,我们现在几乎完成了所有功能!
非常感谢我们在JCP内部和外部收到的所有贡献。这个规范非常稳健,将消除Java SE和Java EE开发中剩余的痛点之一。