以下是Spring Boot默認注冊的轉換器列表及其功能說明。這些轉換器使得控制器方法可以直接接收Integer
、Long
、Date
等類型參數,無需手動實現轉換:
默認轉換器列表及功能
1. 基礎類型轉換器
轉換器名稱 | 功能 | 示例場景 |
---|---|---|
StringToIntegerConverter | 將字符串轉換為Integer | URL參數?count=123 → Integer count |
StringToLongConverter | 將字符串轉換為Long | URL參數?id=1000L → Long id |
StringToDoubleConverter | 將字符串轉換為Double | URL參數?price=19.99 → Double price |
StringToBooleanConverter | 將字符串(如true/false )轉換為Boolean | URL參數?active=true → Boolean active |
2. 日期時間轉換器
轉換器名稱 | 功能 | 示例場景 |
---|---|---|
StringToDateConverter | 將字符串轉換為java.util.Date (默認格式yyyy-MM-dd HH:mm:ss ) | URL參數?date=2023-10-01 → Date date |
StringToLocalDateConverter | 將字符串轉換為java.time.LocalDate (默認格式yyyy-MM-dd ) | URL參數?birthday=1990-01-01 → LocalDate birthday |
StringToLocalDateTimeConverter | 轉換為LocalDateTime (默認格式yyyy-MM-dd HH:mm:ss ) | URL參數?createTime=2023-10-01T12:30:00 → LocalDateTime createTime |
3. 集合與數組轉換器
轉換器名稱 | 功能 | 示例場景 |
---|---|---|
StringToArrayConverter | 將逗號分隔的字符串轉換為數組(如String[] ) | URL參數?tags=a,b,c → String[] tags |
StringToCollectionConverter | 轉換為集合類型(如List<String> 或Set<String> ) | URL參數?ids=1,2,3 → List<String> ids |
4. 枚舉與特殊類型轉換器
轉換器名稱 | 功能 | 示例場景 |
---|---|---|
StringToEnumConverter | 將字符串轉換為枚舉類型(通過枚舉名稱匹配) | URL參數?status=ACTIVE → StatusEnum status |
StringToUUIDConverter | 將字符串轉換為UUID | URL參數?uuid=550e8400-e29b-41d4-a716-446655440000 → UUID uuid |
StringToDurationConverter | 將字符串(如"10s" )轉換為java.time.Duration | URL參數?timeout=30s → Duration timeout |
5. 其他實用轉換器
轉換器名稱 | 功能 | 示例場景 |
---|---|---|
SpelExpressionConverter | 使用SpEL表達式解析參數(需開啟spring.expression.spel-enabled=true ) | URL參數?size=#{T(java.lang.Math).random()} → 動態計算值 |
StringToURIConverter | 將字符串轉換為URI 對象 | URL參數?url=http://example.com → URI url |
默認轉換器的注冊機制
Spring Boot在啟動時通過以下方式自動注冊這些轉換器:
-
FormattingConversionServiceFactoryBean
- 注冊基礎類型、日期、枚舉等轉換器。
- 支持
@NumberFormat
和@DateTimeFormat
注解。
-
WebConversionService
- 擴展
FormattingConversionService
,添加Web相關的轉換器(如StringToArrayConverter
)。
- 擴展
如何查看所有已注冊的轉換器?
可以通過以下代碼在控制器中輸出所有轉換器:
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;// 示例:在配置類中打印所有轉換器
@Configuration
public class ConversionServiceConfig implements WebMvcConfigurer {@Autowiredprivate RequestMappingHandlerAdapter adapter;@PostConstructpublic void printConverters() {ConfigurableWebBindingInitializer bindingInitializer = (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer();DefaultConversionService conversionService = (DefaultConversionService) bindingInitializer.getConversionService();conversionService.getConverters().forEach(converter -> System.out.println("Registered Converter: " + converter.getClass().getName()));}
}
使用默認轉換器的注意事項
-
格式問題
- 若日期格式不符合默認規則(如需
dd/MM/yyyy
),需通過@DateTimeFormat
或自定義轉換器修改。 - 數字類型(如
Double
)對非數字字符串(如"abc"
)會拋出異常。
- 若日期格式不符合默認規則(如需
-
類型沖突
- 若多個轉換器匹配同一類型,優先級由Spring決定(如
Converter
優先于GenericConverter
)。
- 若多個轉換器匹配同一類型,優先級由Spring決定(如
-
自定義擴展
- 可通過實現
Converter
或Formatter
接口,并注冊到WebMvcConfigurer
中覆蓋默認行為。
- 可通過實現
總結表格
類型 | 支持的轉換 | 默認格式/規則 |
---|---|---|
基礎類型 | String → Integer/Long/Double/Boolean | 直接解析字符串為對應類型 |
日期時間 | String → Date/LocalDate/LocalDateTime | yyyy-MM-dd HH:mm:ss (可自定義) |
集合/數組 | String → String[]/List/Set | 逗號分隔符(如a,b,c ) |
枚舉 | String → Enum | 枚舉名稱匹配(不區分大小寫) |
特殊類型 | String → UUID/Duration/URI | 標準格式(如UUID的xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ) |
通過這些默認轉換器,Spring Boot大幅簡化了參數處理,但復雜場景仍需自定義擴展。