Clear path pattern in HandlerMapping

This commit refactors cb2b141d31 to move
the cleaning code from a DeferredResultProcessingInterceptor to the
RouterFunctionMapping.

See gh-26239
This commit is contained in:
Arjen Poutsma 2020-12-08 13:06:45 +01:00
parent cb2b141d31
commit 2b77c08e09
2 changed files with 6 additions and 15 deletions

View File

@ -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 <T> void postProcess(NativeWebRequest request, DeferredResult<T> 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);
}

View File

@ -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);
}
}