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:
parent
cb2b141d31
commit
2b77c08e09
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue