对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

验证、数据绑定和类型转换

将验证视为业务逻辑有其优缺点,而 Spring 提供了一种验证和数据绑定的设计,不会排除其中任何一种观点。 具体而言,验证不应与 Web 层耦合,应易于本地化,并且应能够轻松集成任何可用的验证器。考虑到这些需求, Spring 提供了一个 Validator 接口,该接口既基础又非常适合在应用程序的每一层中使用。spring-doc.cadn.net.cn

数据绑定对于将用户输入动态绑定到应用程序的领域模型(或你用于处理用户输入的任何对象)非常有用。Spring 提供了恰如其名的 DataBinder 来实现这一功能。ValidatorDataBinder 共同组成了 validation 包,该包主要用于 Web 层,但并不限于此。spring-doc.cadn.net.cn

BeanWrapper 是 Spring 框架中的一个基本概念,并在许多地方被使用。然而,您很可能不需要直接使用 BeanWrapper。不过,由于这是参考文档,我们认为有必要做一些解释。我们在本章中介绍 BeanWrapper,因为如果您确实要使用它,最有可能是在尝试将数据绑定到对象时使用。spring-doc.cadn.net.cn

Spring 的 DataBinder 和底层的 BeanWrapper 都使用 PropertyEditorSupport 的实现来解析和格式化属性值。PropertyEditorPropertyEditorSupport 类型属于 JavaBeans 规范的一部分,也在本章中进行了说明。Spring 的 core.convert 包提供了一套通用的类型转换功能,同时还提供了一个更高层次的 format 包,用于格式化用户界面字段的值。你可以将这些包作为 PropertyEditorSupport 实现的更简单替代方案。这些内容也在本章中进行了讨论。spring-doc.cadn.net.cn

Spring 通过设置基础设施以及适配到 Spring 自有的 Validator 契约,支持 Java Bean 验证。应用程序可以如 Java Bean 验证 中所述,全局启用一次 Bean 验证,并专门将其用于所有验证需求。在 Web 层,应用程序还可以如 配置 DataBinder 中所述,针对每个 DataBinder 注册控制器本地的 Spring Validator 实例,这对于插入自定义验证逻辑非常有用。spring-doc.cadn.net.cn