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