驗證、資料繫結和型別轉換
將驗證視為業務邏輯有利有弊,Spring 提供了一種驗證和資料繫結的設計,兩者兼顧。具體來說,驗證不應與 Web 層繫結,應易於本地化,並且應能夠插入任何可用的驗證器。考慮到這些問題,Spring 提供了一個 Validator 契約,它既基礎又可在應用程式的每個層中完美使用。
資料繫結對於讓使用者輸入動態繫結到應用程式的域模型(或您用於處理使用者輸入的任何物件)非常有用。Spring 提供了恰如其名的 DataBinder 來實現這一點。Validator 和 DataBinder 構成了 validation 包,該包主要用於但不限於 Web 層。
BeanWrapper 是 Spring 框架中的一個基本概念,在許多地方都使用到。但是,您可能不需要直接使用 BeanWrapper。然而,由於這是參考文件,我們認為有必要進行一些解釋。我們在本章中解釋 BeanWrapper,因為如果您要使用它,最有可能是在嘗試將資料繫結到物件時。
Spring 的 DataBinder 和更底層的 BeanWrapper 都使用 PropertyEditorSupport 實現來解析和格式化屬性值。PropertyEditor 和 PropertyEditorSupport 型別是 JavaBeans 規範的一部分,也將在本章中進行解釋。Spring 的 core.convert 包提供了通用的型別轉換功能,以及用於格式化 UI 欄位值的更高階的 format 包。您可以將這些包用作 PropertyEditorSupport 實現的更簡單替代方案。它們也將在本章中討論。
Spring 透過設定基礎設施和介面卡支援 Java Bean Validation,以適應 Spring 自己的 Validator 契約。應用程式可以全域性啟用 Bean Validation,如 Java Bean Validation 中所述,並將其專門用於所有驗證需求。在 Web 層,應用程式可以為每個 DataBinder 進一步註冊控制器本地的 Spring Validator 例項,如 配置 DataBinder 中所述,這對於插入自定義驗證邏輯非常有用。