类型转换

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

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

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

从 5.3 版本开始,即使在类型转换之后,也将强制执行非空参数。如果您的处理程序方法也打算接受 null 值,请将参数声明为 @Nullable,或者在相应的 @RequestParam 等注解中将其标记为 required=false。这是最佳实践,也是解决 5.3 升级中遇到的回归问题的推荐解决方案。另外,您也可以特别处理,例如,在需要 @PathVariable 的情况下,处理由此产生的 MissingPathVariableException。转换后的 null 值将被视为原始空值,因此将抛出相应的 Missing…​Exception 变体。