类型转换
一些表示基于 String
的请求输入的注解控制器方法参数(例如 @RequestParam
、@RequestHeader
、@PathVariable
、@MatrixVariable
和 @CookieValue
),如果参数声明为 String
以外的类型,则可能需要进行类型转换。
对于这种情况,会自动根据配置的转换器应用类型转换。默认情况下,支持简单类型(如 int
、long
、Date
等)。你可以通过 WebDataBinder
自定义类型转换(参见 数据绑定器),或者通过向 FormattingConversionService
注册 Formatters
来实现。详细信息请参阅 Spring 字段格式化。
在类型转换中的一个实际问题是处理空字符串源值。如果这样的值在类型转换后变为 null
,它将被视为缺失值。这种情况可能出现在 Long
、UUID
和其他目标类型中。如果你希望允许注入 null
,可以在参数注解中使用 required
标志,或者将参数声明为 @Nullable
。
备注
从 5.3 版本开始,即使经过类型转换,非空参数也会被强制执行。如果你的处理方法也打算接受空值,要么将参数声明为 @Nullable
,要么在相应的 @RequestParam
等注解中将其标记为 required=false
。这是在 5.3 升级中遇到回归问题的最佳实践和推荐解决方案。
或者,你可以特别处理某些情况,例如,在需要 @PathVariable
时处理由此产生的 MissingPathVariableException
。转换后的空值将被视为原始空值,因此将抛出相应的 Missing…Exception
变体。