将验证视为业务逻辑是有利弊的,Spring提供了一种验证(和数据绑定)设计,不排除其中任何一种验证。具体来说,验证不应该绑定到Web层,应该易于本地化,并且应该可以插入任何可用的验证程序。考虑到这些问题,Spring提出了一个Validator接口,它既基础又在应用程序的每一层都非常可用。
数据绑定对于让用户输入动态绑定到应用程序的域模型(或用于处理用户输入的任何对象)非常有用。Spring提供了恰当命名的DataBinder来实现这一点。Validator和DataBinder组成validation包,该包主要用于但不限于MVC框架。
BeanWrapper是Spring框架中的一个基本概念,在很多地方都有使用。但是,你可能不需要直接使用BeanWrapper。然而,由于这是参考指南,我们还是要按规则做一些说明。我们在本章中解释BeanWrapper,因为如果你要使用它,那么在尝试将数据绑定到对象时,你很可能会这样做。
Spring的DataBinder和较低级别的BeanWrapper都使用PropertyEditorsSupport实现来解析和格式化属性值。PropertyEditor和PropertyEditorSupport类型是JavaBeans规范的一部分,本章也将对此进行解释。Spring3引入了一个core.convert包,它提供了一个通用的类型转换工具,以及一个更高级的“格式”包,用于格式化UI字段值。你可以使用这些包作为PropertyEditorSupport实现的简单替代方案。本章还将讨论这些问题。
JSR-303/JSR-349 Bean Validation
从4.0版开始,Spring框架支持Bean Validation 1.0 (JSR-303) 和Bean Validation 1.1(JSR-349),以支持安装并使其适应Spring的Validator接口。
应用程序可以选择全局启用一次bean验证,如Spring验证中所述,并专门用于所有验证需求。
应用程序还可以为每个DataBinder实例注册额外的Spring Validator实例,如配置DataBinder中所述。这对于在不使用注解的情况下插入验证逻辑可能很有用。