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.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.MultiValueMap;
|
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.AsyncWebRequest;
|
||||||
import org.springframework.web.context.request.async.DeferredResult;
|
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.WebAsyncManager;
|
||||||
import org.springframework.web.context.request.async.WebAsyncUtils;
|
import org.springframework.web.context.request.async.WebAsyncUtils;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
@ -57,16 +54,6 @@ import org.springframework.web.servlet.ModelAndView;
|
||||||
*/
|
*/
|
||||||
final class DefaultAsyncServerResponse extends ErrorHandlingServerResponse implements AsyncServerResponse {
|
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(
|
static final boolean reactiveStreamsPresent = ClassUtils.isPresent(
|
||||||
"org.reactivestreams.Publisher", DefaultAsyncServerResponse.class.getClassLoader());
|
"org.reactivestreams.Publisher", DefaultAsyncServerResponse.class.getClassLoader());
|
||||||
|
|
||||||
|
|
@ -141,7 +128,6 @@ final class DefaultAsyncServerResponse extends ErrorHandlingServerResponse imple
|
||||||
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
|
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
|
||||||
AsyncWebRequest asyncWebRequest = WebAsyncUtils.createAsyncWebRequest(request, response);
|
AsyncWebRequest asyncWebRequest = WebAsyncUtils.createAsyncWebRequest(request, response);
|
||||||
asyncManager.setAsyncWebRequest(asyncWebRequest);
|
asyncManager.setAsyncWebRequest(asyncWebRequest);
|
||||||
asyncManager.registerDeferredResultInterceptors(CLEAR_PATTERN_ATTRIBUTE_INTERCEPTOR);
|
|
||||||
try {
|
try {
|
||||||
asyncManager.startDeferredResultProcessing(deferredResult);
|
asyncManager.startDeferredResultProcessing(deferredResult);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ public class RouterFunctionMapping extends AbstractHandlerMapping implements Ini
|
||||||
protected Object getHandlerInternal(HttpServletRequest servletRequest) throws Exception {
|
protected Object getHandlerInternal(HttpServletRequest servletRequest) throws Exception {
|
||||||
if (this.routerFunction != null) {
|
if (this.routerFunction != null) {
|
||||||
ServerRequest request = ServerRequest.create(servletRequest, this.messageConverters);
|
ServerRequest request = ServerRequest.create(servletRequest, this.messageConverters);
|
||||||
servletRequest.setAttribute(RouterFunctions.REQUEST_ATTRIBUTE, request);
|
setAttributes(servletRequest, request);
|
||||||
return this.routerFunction.route(request).orElse(null);
|
return this.routerFunction.route(request).orElse(null);
|
||||||
}
|
}
|
||||||
else {
|
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