diff --git a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java index 1bb2c088c1..d34d8011b5 100644 --- a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java +++ b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java @@ -60,7 +60,8 @@ class TypeConverterDelegate { try { Class clazz = ClassUtils.forName("java.util.Optional", TypeConverterDelegate.class.getClassLoader()); javaUtilOptionalEmpty = ClassUtils.getMethod(clazz, "empty").invoke(null); - } catch (Exception ex) { + } + catch (Exception ex) { // Java 8 not available - conversion to Optional not supported then. } } @@ -257,8 +258,11 @@ class TypeConverterDelegate { standardConversion = true; } } - else if (requiredType.equals(javaUtilOptionalEmpty.getClass())) { - convertedValue = javaUtilOptionalEmpty; + else { + // convertedValue == null + if (javaUtilOptionalEmpty != null && requiredType.equals(javaUtilOptionalEmpty.getClass())) { + convertedValue = javaUtilOptionalEmpty; + } } if (!ClassUtils.isAssignableValue(requiredType, convertedValue)) {