验证、数据绑定和类型转换
将验证视为业务逻辑有其优缺点,Spring 提供了一种验证和数据绑定的设计,不会排除任何一种。具体来说,验证不应与 Web 层绑定,应易于本地化,并且应该可以插入任何可用的验证器。考虑到这些问题,Spring 提供了一个Validator
契约,它既基础又非常易于在应用程序的每一层使用。
数据绑定有助于将用户输入动态绑定到应用程序的领域模型(或您用于处理用户输入的任何对象)。Spring 提供了恰如其分的命名DataBinder
来完成这项工作。Validator
和DataBinder
构成了validation
包,它主要用于(但不限于)Web 层。
BeanWrapper
是 Spring 框架中的一个基本概念,在很多地方都被使用。但是,您可能不需要直接使用BeanWrapper
。然而,因为这是参考文档,我们认为应该做一些解释。我们在本章中解释了BeanWrapper
,因为如果您要使用它,您最有可能在尝试将数据绑定到对象时这样做。
Spring 的DataBinder
和更底层的BeanWrapper
都使用PropertyEditorSupport
实现来解析和格式化属性值。PropertyEditor
和PropertyEditorSupport
类型是 JavaBeans 规范的一部分,也将在本章中进行解释。Spring 的core.convert
包提供了一个通用的类型转换工具,以及一个更高层次的format
包用于格式化 UI 字段值。您可以将这些包用作PropertyEditorSupport
实现的更简单的替代方案。本章也将讨论它们。
Spring 通过设置基础结构和对 Spring 自身Validator
契约的适配器来支持 Java Bean 验证。应用程序可以像Java Bean 验证中所述的那样,全局启用一次 Bean 验证,并将其专门用于所有验证需求。在 Web 层中,应用程序可以进一步为每个DataBinder
注册控制器级别的 SpringValidator
实例,如配置DataBinder
中所述,这对于插入自定义验证逻辑非常有用。