diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java index 9c94758a16b..bfda2d48494 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java @@ -591,8 +591,11 @@ public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMap public void register(T mapping, Object handler, Method method) { // Assert that the handler method is not a suspending one. - if (KotlinDetector.isKotlinType(method.getDeclaringClass()) && KotlinDelegate.isSuspend(method)) { - throw new IllegalStateException("Unsupported suspending handler method detected: " + method); + if (KotlinDetector.isKotlinType(method.getDeclaringClass())) { + Class[] parameterTypes = method.getParameterTypes(); + if ((parameterTypes.length > 0) && "kotlin.coroutines.Continuation".equals(parameterTypes[parameterTypes.length - 1].getName())) { + throw new IllegalStateException("Unsupported suspending handler method detected: " + method); + } } this.readWriteLock.writeLock().lock(); try {