Skip to content

ZoneIdEditor throws wrong exception type for TypeConverterSupport #33545

@harmonic-ben

Description

@harmonic-ben

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:

   @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.

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions