@@ -2222,6 +2222,17 @@ This can be the case for `Long`, `UUID`, and other target types. If you want to
2222
2222
to be injected, either use the `required` flag on the argument annotation, or declare the
2223
2223
argument as `@Nullable`.
2224
2224
2225
+ [NOTE]
2226
+ ====
2227
+ As of 5.3, non-null arguments will be enforced even after type conversion. If your handler
2228
+ method intends to accept a null value as well, either declare your argument as `@Nullable`
2229
+ or mark it as `required=false` in the corresponding `@RequestParam` etc annotation. This is
2230
+ a best practice and the recommended solution for regressions encountered in a 5.3 upgrade.
2231
+
2232
+ Alternatively, you may specifically handle e.g. the resulting `MissingPathVariableException`
2233
+ in the case of a required `@PathVariable`. A null value after conversion will be treated like
2234
+ an empty original value, so the corresponding `Missing...Exception` variants will be thrown.
2235
+ ====
2225
2236
2226
2237
2227
2238
[[mvc-ann-matrix-variables]]
@@ -3683,14 +3694,15 @@ controller-specific `Formatter` implementations, as the following example shows:
3683
3694
}
3684
3695
----
3685
3696
3686
- The exception may match against a top-level exception being propagated (that is, a direct
3687
- `IOException` being thrown) or against the immediate cause within a top-level wrapper exception
3688
- (for example, an `IOException` wrapped inside an `IllegalStateException`).
3697
+ The exception may match against a top-level exception being propagated (e.g. a direct
3698
+ `IOException` being thrown) or against a nested cause within a wrapper exception (e.g.
3699
+ an `IOException` wrapped inside an `IllegalStateException`). As of 5.3, this can match
3700
+ at arbitrary cause levels, whereas previously only an immediate cause was considered.
3689
3701
3690
3702
For matching exception types, preferably declare the target exception as a method argument,
3691
- as the preceding example shows. When multiple exception methods match, a root exception match is generally
3692
- preferred to a cause exception match. More specifically, the `ExceptionDepthComparator` is
3693
- used to sort exceptions based on their depth from the thrown exception type.
3703
+ as the preceding example shows. When multiple exception methods match, a root exception match is
3704
+ generally preferred to a cause exception match. More specifically, the `ExceptionDepthComparator`
3705
+ is used to sort exceptions based on their depth from the thrown exception type.
3694
3706
3695
3707
Alternatively, the annotation declaration may narrow the exception types to match,
3696
3708
as the following example shows:
0 commit comments