类型转换

一些表示基于 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 变体。