Validation, Data Binding, and Type Conversion
将验证视为业务逻辑既有优势也有劣势,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 通过设置基础设施和 Spring 自己的 "@8" 合约适配器支持 Java Bean 验证。应用程序可以一次全局启用 Bean 验证,如 "@12" 中所述,并且可以仅用于所有验证需要。在 Web 层中,应用程序可以针对每个 "@10" 注册控制器本地的 Spring "@9" 实例,如 "@13" 中所述,这有助于引入自定义验证逻辑。