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

将验证视为业务逻辑有利有弊,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 Validation,以适应 Spring 自己的 Validator 契约。 应用程序可以按照 Java Bean Validation 中所述,全局启用 Bean Validation,并将其专门用于所有验证需求。 在 Web 层中,应用程序可以按照 配置 DataBinder 中所述,为每个 DataBinder 进一步注册控制器本地的 Spring Validator 实例,这对于插入自定义验证逻辑非常有用。