验证、数据绑定和类型转换
考虑将验证作为业务逻辑有利有弊,Spring提供了一种验证和数据绑定的设计,不排除其中任何一种。具体来说,验证不应该与Web层绑定在一起,应该易于本地化,并且应该可以插入任何可用的验证器。考虑到这些问题,Spring提供了一个基本且在应用程序的每一层中都可以使用的Validator
合约。
数据绑定对于让用户输入动态绑定到应用程序的领域模型(或者您用于处理用户输入的任何对象)非常有用。Spring提供了名副其实的DataBinder
来实现这一点。Validator
和DataBinder
组成了validation
包,主要用于但不限于Web层。
BeanWrapper
是Spring Framework中的一个基本概念,在许多地方都有使用。但是,您可能不需要直接使用BeanWrapper
。然而,由于这是参考文档,我们认为有必要进行一些解释。我们在本章中解释了BeanWrapper
,因为如果您要使用它,最有可能是在尝试将数据绑定到对象时。
Spring的DataBinder
和较低级别的BeanWrapper
都使用PropertyEditorSupport
实现来解析和格式化属性值。PropertyEditor
和PropertyEditorSupport
类型是JavaBeans规范的一部分,也在本章中进行了解释。Spring的core.convert
包提供了一个通用的类型转换功能,以及一个用于格式化UI字段值的更高级别的format
包。您可以将这些包用作PropertyEditorSupport
实现的更简单替代方案。它们也在本章中进行了讨论。
Spring通过设置基础设施和适配器支持Java Bean验证,适配到Spring自己的Validator
合约。应用程序可以全局启用Bean验证,如在Java Bean验证中描述的那样,并且可以专门用于所有验证需求。在Web层中,应用程序还可以根据配置DataBinder
中描述的方式,为每个DataBinder
注册控制器本地的SpringValidator
实例,这对于插入自定义验证逻辑非常有用。