验证、数据绑定和类型转换

考虑将验证作为业务逻辑有利有弊,Spring提供了一种验证和数据绑定的设计,不排除其中任何一种。具体来说,验证不应该与Web层绑定在一起,应该易于本地化,并且应该可以插入任何可用的验证器。考虑到这些问题,Spring提供了一个基本且在应用程序的每一层中都可以使用的Validator合约。

数据绑定对于让用户输入动态绑定到应用程序的领域模型(或者您用于处理用户输入的任何对象)非常有用。Spring提供了名副其实的DataBinder来实现这一点。ValidatorDataBinder组成了validation包,主要用于但不限于Web层。

BeanWrapper是Spring Framework中的一个基本概念,在许多地方都有使用。但是,您可能不需要直接使用BeanWrapper。然而,由于这是参考文档,我们认为有必要进行一些解释。我们在本章中解释了BeanWrapper,因为如果您要使用它,最有可能是在尝试将数据绑定到对象时。

Spring的DataBinder和较低级别的BeanWrapper都使用PropertyEditorSupport实现来解析和格式化属性值。PropertyEditorPropertyEditorSupport类型是JavaBeans规范的一部分,也在本章中进行了解释。Spring的core.convert包提供了一个通用的类型转换功能,以及一个用于格式化UI字段值的更高级别的format包。您可以将这些包用作PropertyEditorSupport实现的更简单替代方案。它们也在本章中进行了讨论。

Spring通过设置基础设施和适配器支持Java Bean验证,适配到Spring自己的Validator合约。应用程序可以全局启用Bean验证,如在Java Bean验证中描述的那样,并且可以专门用于所有验证需求。在Web层中,应用程序还可以根据配置DataBinder中描述的方式,为每个DataBinder注册控制器本地的SpringValidator实例,这对于插入自定义验证逻辑非常有用。