考慮到propertyeditor的無狀态和非線程安全特性,spring 3增加了一個formatter接口來替代它。formatters提供和propertyeditor類似的功能,但是提供線程安全特性,并且專注于完成字元串和對象類型的互相轉換。
假設在我們的程式中,需要根據一本書的isbn字元串得到對應的book對象。通過這個類型格式化工具,我們可以在控制器的方法簽名中定義book參數,而url參數隻需要包含isbn号和資料庫id。
首先在項目根目錄下建立formatters包
然後建立bookformatter,它實作了formatter接口,實作兩個函數:parse用于将字元串isbn轉換成book對象;print用于将book對象轉換成該book對應的isbn字元串。
在webconfiguration中添加我們定義的formatter,重寫(@override修飾)addformatter(formatterregistry registry)函數。
最後,需要在bookcontroller中新加一個函數getreviewers,根據一本書的isbn号擷取該書的審閱人。
通過<code>mvn spring-boot:run</code>運作程式
formatter工具的目标是提供跟propertyeditor類似的功能。通過formatterregistry将我們自己的formtter注冊到系統中,然後spring會自動完成文本表示的book和book實體對象之間的互相轉換。由于formatter是無狀态的,是以不需要為每個請求都執行注冊formatter的動作。
使用建議:如果需要通用類型的轉換——例如string或boolean,最好使用propertyeditor完成,因為這種需求可能不是全局需要的,隻是某個controller的定制功能需求。
我們在webconfiguration中引入(@autowired)了bookrepository(需要用它建立bookformatter執行個體),spring給配置檔案提供了使用其他bean對象的能力。spring本身會確定bookrepository先建立,然後在webconfiguration類的建立過程中引入。