diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java index 48a5e900e7b..0fd28344543 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultAsyncServerResponse.java @@ -40,11 +40,8 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.MultiValueMap; -import org.springframework.web.context.request.NativeWebRequest; -import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.async.AsyncWebRequest; import org.springframework.web.context.request.async.DeferredResult; -import org.springframework.web.context.request.async.DeferredResultProcessingInterceptor; import org.springframework.web.context.request.async.WebAsyncManager; import org.springframework.web.context.request.async.WebAsyncUtils; import org.springframework.web.servlet.ModelAndView; @@ -57,16 +54,6 @@ import org.springframework.web.servlet.ModelAndView; */ final class DefaultAsyncServerResponse extends ErrorHandlingServerResponse implements AsyncServerResponse { - private static final DeferredResultProcessingInterceptor CLEAR_PATTERN_ATTRIBUTE_INTERCEPTOR = - new DeferredResultProcessingInterceptor() { - @Override - public void postProcess(NativeWebRequest request, DeferredResult deferredResult, - Object concurrentResult) { - request.removeAttribute(RouterFunctions.MATCHING_PATTERN_ATTRIBUTE, - RequestAttributes.SCOPE_REQUEST); - } - }; - static final boolean reactiveStreamsPresent = ClassUtils.isPresent( "org.reactivestreams.Publisher", DefaultAsyncServerResponse.class.getClassLoader()); @@ -141,7 +128,6 @@ final class DefaultAsyncServerResponse extends ErrorHandlingServerResponse imple WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); AsyncWebRequest asyncWebRequest = WebAsyncUtils.createAsyncWebRequest(request, response); asyncManager.setAsyncWebRequest(asyncWebRequest); - asyncManager.registerDeferredResultInterceptors(CLEAR_PATTERN_ATTRIBUTE_INTERCEPTOR); try { asyncManager.startDeferredResultProcessing(deferredResult); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java index 3a5cc380802..040679b595d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/support/RouterFunctionMapping.java @@ -189,7 +189,7 @@ public class RouterFunctionMapping extends AbstractHandlerMapping implements Ini protected Object getHandlerInternal(HttpServletRequest servletRequest) throws Exception { if (this.routerFunction != null) { ServerRequest request = ServerRequest.create(servletRequest, this.messageConverters); - servletRequest.setAttribute(RouterFunctions.REQUEST_ATTRIBUTE, request); + setAttributes(servletRequest, request); return this.routerFunction.route(request).orElse(null); } else { @@ -197,4 +197,9 @@ public class RouterFunctionMapping extends AbstractHandlerMapping implements Ini } } + private void setAttributes(HttpServletRequest servletRequest, ServerRequest request) { + servletRequest.removeAttribute(RouterFunctions.MATCHING_PATTERN_ATTRIBUTE); + servletRequest.setAttribute(RouterFunctions.REQUEST_ATTRIBUTE, request); + } + }