型別轉換

一些表示基於 String 的請求輸入(例如 `@RequestParam`、`@RequestHeader`、`@PathVariable`、`@MatrixVariable` 和 `@CookieValue`)的帶註解的 Controller 方法引數,如果宣告的引數型別不是 String,則可能需要型別轉換。

對於這種情況,型別轉換會根據配置的轉換器自動應用。預設情況下,支援簡單型別(intlongDate 等)。你可以透過 WebDataBinder(參閱DataBinder)或向 FormattingConversionService 註冊 Formatter 來自定義型別轉換。參閱Spring 欄位格式化

型別轉換中一個實際的問題是空 String 源值的處理。如果這種值在型別轉換後變成 null,則會被視為缺失。對於 LongUUID 和其他目標型別來說,情況可能如此。如果你想允許注入 null 值,可以在引數註解上使用 required 標誌,或將引數宣告為 @Nullable

從 5.3 版本開始,即使在型別轉換後,非 null 引數也會被強制執行。如果你的處理方法也打算接受 null 值,可以將引數宣告為 @Nullable,或者在相應的 `@RequestParam` 等註解中將其標記為 required=false。這是最佳實踐,也是解決 5.3 升級中遇到的迴歸問題的推薦方案。

另外,你也可以專門處理例如 required @PathVariable 導致的 MissingPathVariableException。轉換後的 null 值將被視為原始的空值,因此會丟擲相應的 Missing…​Exception 變體。