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

Last modified: 03 May 2025

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