Bean Validation (JSR 303) 发布最终草案

发布者:    |      

好消息!

Bean Validation 现已进入最终草案阶段,并可在 JCP 网站上下载。Bean Validation 标准化了在对象图中定义、声明和验证约束的方式。通过使用注解,如@NotNull, @Email等,您只需在领域模型中表达一次约束(遵循DRY原则),然后让它们自动由应用程序的不同层进行验证。Bean Validation 还通过元数据查询API公开约束,这对于与Java之外交互的框架很有用,如javascript库或数据库模式生成器。

以下是该最终草案的主要亮点

  • 类型安全的约束验证器
  • XML配置和XML映射支持
  • 更清晰的名字
  • 集成到JPA 2和JSF 2
  • 更多内置约束

类型安全的约束验证器

约束现在以类型安全的方式验证特定类型(如StringCollection)等。您甚至可以将多个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开发中剩余的痛点之一。


回到顶部