跳到主要内容

类型转换

DeepSeek V3 中英对照 Type Conversion

一些表示基于 String 的请求输入的注解控制器方法参数(例如 @RequestParam@RequestHeader@PathVariable@MatrixVariable@CookieValue),如果参数声明为 String 以外的类型,则可能需要进行类型转换。

对于这种情况,会自动根据配置的转换器应用类型转换。默认情况下,支持简单类型(如 intlongDate 等)。你可以通过 WebDataBinder 自定义类型转换(参见 数据绑定器),或者通过向 FormattingConversionService 注册 Formatters 来实现。详细信息请参阅 Spring 字段格式化

在类型转换中的一个实际问题是处理空字符串源值。如果这样的值在类型转换后变为 null,它将被视为缺失值。这种情况可能出现在 LongUUID 和其他目标类型中。如果你希望允许注入 null,可以在参数注解中使用 required 标志,或者将参数声明为 @Nullable

备注

从 5.3 版本开始,即使经过类型转换,非空参数也会被强制执行。如果你的处理方法也打算接受空值,要么将参数声明为 @Nullable,要么在相应的 @RequestParam 等注解中将其标记为 required=false。这是在 5.3 升级中遇到回归问题的最佳实践和推荐解决方案。

或者,你可以特别处理某些情况,例如,在需要 @PathVariable 时处理由此产生的 MissingPathVariableException。转换后的空值将被视为原始空值,因此将抛出相应的 Missing…​Exception 变体。