类型转换

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

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

类型转换中的一个实际问题是对空字符串源值的处理。如果这样的值由于类型转换变为null,则会被视为缺失。这可能发生在LongUUID和其他目标类型的情况下。如果要允许注入null,可以在参数注解上使用required标志,或将参数声明为@Nullable

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

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