Spring Framework Version: Latest (6.1.13) and below
spring-beans/src/main/java/org/springframework/beans/propertyeditors/ZoneIdEditor.java
calls ZoneId.of
which throws a java.time.DateTimeException
.
But org.springframework.beans.TypeConverterSupport.convertIfNecessary(String, Object, Class<T>, TypeDescriptor)
is expecting an IllegalArgumentException
.
This manifests in a variety of ways. Best example is in web-mvc
assuming a controller with:
```java @GetMapping("/") public void get( @RequestParam(name = "integer", required = false) int integer, @RequestParam(name = "zoneId") ZoneId zoneId) {
}
```
This means a get
request of /?integer=helloworld
results in a MethodArgumentTypeMismatchException
which can easily be bound to 400 response.
However a get
request of /?zoneId=helloworld
results in a DateTimeException
which binds to 500 response.
The integer parameter binding works because it throws NumberFormatException
which extends from IllegalArgumentException
.