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