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

将验证视为业务逻辑有其优缺点,Spring 提供了一种验证和数据绑定的设计,不会排除任何一种。具体来说,验证不应与 Web 层绑定,应易于本地化,并且应该可以插入任何可用的验证器。考虑到这些问题,Spring 提供了一个Validator契约,它既基础又非常易于在应用程序的每一层使用。

数据绑定有助于将用户输入动态绑定到应用程序的领域模型(或您用于处理用户输入的任何对象)。Spring 提供了恰如其分的命名DataBinder来完成这项工作。ValidatorDataBinder构成了validation包,它主要用于(但不限于)Web 层。

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

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

Spring 通过设置基础结构和对 Spring 自身Validator契约的适配器来支持 Java Bean 验证。应用程序可以像Java Bean 验证中所述的那样,全局启用一次 Bean 验证,并将其专门用于所有验证需求。在 Web 层中,应用程序可以进一步为每个DataBinder注册控制器级别的 SpringValidator实例,如配置DataBinder中所述,这对于插入自定义验证逻辑非常有用。