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

在考虑验证作为业务逻辑的利弊时,框架提供了一个不排除任何一方的验证和数据绑定设计。 具体来说,验证不应该仅限于 Web 层,并且应该容易本地化,同时应该能够接入任何可用的验证器。 鉴于这些考虑,框架提供了一个既基础又极具可用性的 Validator 合约,可在应用的每个层次中使用。

数据绑定对于让用户输入动态地绑定到应用的领域模型(或任何用于处理用户输入的对象)非常有用。 框架提供了恰当命名的 DataBinder 来做到这一点。ValidatorDataBinder 构成了主要用于但不限于 Web 层的 validation 包。

BeanWrapper 是框架中的一个基本概念,被广泛使用。然而,您可能不需要直接使用 BeanWrapper。 由于这是参考文档,我们认为可能需要一些解释。我们在本章中解释 BeanWrapper,因为如果您要使用它, 最有可能的情况是在尝试将数据绑定到对象时。

DataBinder 和更低级的 BeanWrapper 都使用 PropertyEditorSupport 实现来解析和格式化属性值。 PropertyEditorPropertyEditorSupport 类型是 JavaBeans 规范的一部分, 在本章中也有解释。core.conversion 包提供了一个通用的类型转换设施,以及用于格式化 UI 字段值的更高级别的 format 包。您可以使用这些包作为 PropertyEditorSupport 实现的更简单的替代品。 它们也在本章中讨论。

通过设置基础设施和适配器支持 Java Bean验证。应用程序可以全局启用一次 Bean 验证,如 Java Bean Validation 所述,并且专门用于所有验证需求。在Web层,应用程序还可以根据 配置一个 DataBinder 的方式,为每个 DataBinder 注册控制器本地的 Validator 实例,这对于插入自定义验证逻辑非常有用。