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

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

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

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

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

Spring 通过设置基础设施和一个适配器来支持 Java Bean Validation,该适配器适配到 Spring 自己的Validator契约。应用程序可以全局启用 Bean Validation 一次,如Java Bean Validation中所述,并将其专门用于所有验证需求。在 Web 层,应用程序可以进一步为每个DataBinder注册控制器本地 Spring Validator实例,如配置DataBinder中所述,这对于插入自定义验证逻辑很有用。