|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
验证、数据绑定和类型转换
将验证视为业务逻辑有其优缺点,而 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 包,用于格式化用户界面字段的值。你可以将这些包作为 PropertyEditorSupport 实现的更简单替代方案。这些内容也在本章中进行了讨论。
Spring 通过设置基础设施以及适配到 Spring 自有的 Validator 契约,支持 Java Bean 验证。应用程序可以如 Java Bean 验证 中所述,全局启用一次 Bean 验证,并专门将其用于所有验证需求。在 Web 层,应用程序还可以如 配置 DataBinder 中所述,针对每个 DataBinder 注册控制器本地的 Spring Validator 实例,这对于插入自定义验证逻辑非常有用。