以下是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大幅简化了参数处理,但复杂场景仍需自定义扩展。