类型转换

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

对于此类情况,将根据配置的转换器自动应用类型转换。默认情况下,支持简单类型(intlongDate 等)。你可以通过 WebDataBinder(请参阅 DataBinder)或向 FormattingConversionService 注册 Formatters 来自定义类型转换。请参阅 Spring 字段格式化

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

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

或者,您可以在必需的 @PathVariable 的情况下专门处理结果 MissingPathVariableException。转换后的空值将被视为原始空值,因此将抛出相应的 Missing…​Exception 变体。