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