diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java index b3d2ce7cd1..131446e8bf 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java @@ -19,7 +19,6 @@ package org.springframework.web.method.annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Map; -import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import jakarta.servlet.ServletException; @@ -107,9 +106,9 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle NamedValueInfo namedValueInfo = getNamedValueInfo(parameter); MethodParameter nestedParameter = parameter.nestedIfOptional(); - boolean hasDefaultValue = KotlinDetector.isKotlinReflectPresent() - && KotlinDetector.isKotlinType(parameter.getDeclaringClass()) - && KotlinDelegate.hasDefaultValue(nestedParameter); + boolean hasDefaultValue = KotlinDetector.isKotlinReflectPresent() && + KotlinDetector.isKotlinType(parameter.getDeclaringClass()) && + KotlinDelegate.hasDefaultValue(nestedParameter); Object resolvedName = resolveEmbeddedValuesAndExpressions(namedValueInfo.name); if (resolvedName == null) { @@ -336,6 +335,7 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle } } + /** * Inner class to avoid a hard dependency on Kotlin at runtime. */ @@ -346,7 +346,10 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle * or an optional parameter (with a default value in the Kotlin declaration). */ public static boolean hasDefaultValue(MethodParameter parameter) { - Method method = Objects.requireNonNull(parameter.getMethod()); + Method method = parameter.getMethod(); + if (method == null) { + return false; + } KFunction function = ReflectJvmMapping.getKotlinFunction(method); if (function != null) { int index = 0; @@ -359,4 +362,5 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle return false; } } + } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java index fb98c07905..48650437d1 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java @@ -19,7 +19,6 @@ package org.springframework.web.reactive.result.method.annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Map; -import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import kotlin.reflect.KFunction; @@ -227,9 +226,9 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr return Mono.fromSupplier(() -> { Object value = null; - boolean hasDefaultValue = KotlinDetector.isKotlinReflectPresent() - && KotlinDetector.isKotlinType(parameter.getDeclaringClass()) - && KotlinDelegate.hasDefaultValue(parameter); + boolean hasDefaultValue = KotlinDetector.isKotlinReflectPresent() && + KotlinDetector.isKotlinType(parameter.getDeclaringClass()) && + KotlinDelegate.hasDefaultValue(parameter); if (namedValueInfo.defaultValue != null) { value = resolveEmbeddedValuesAndExpressions(namedValueInfo.defaultValue); } @@ -328,6 +327,7 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr } } + /** * Inner class to avoid a hard dependency on Kotlin at runtime. */ @@ -338,7 +338,10 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr * or an optional parameter (with a default value in the Kotlin declaration). */ public static boolean hasDefaultValue(MethodParameter parameter) { - Method method = Objects.requireNonNull(parameter.getMethod()); + Method method = parameter.getMethod(); + if (method == null) { + return false; + } KFunction function = ReflectJvmMapping.getKotlinFunction(method); if (function != null) { int index = 0;