|
40 | 40 | import org.springframework.util.Assert;
|
41 | 41 | import org.springframework.util.ClassUtils;
|
42 | 42 | import org.springframework.util.MultiValueMap;
|
| 43 | +import org.springframework.web.context.request.NativeWebRequest; |
| 44 | +import org.springframework.web.context.request.RequestAttributes; |
43 | 45 | import org.springframework.web.context.request.async.AsyncWebRequest;
|
44 | 46 | import org.springframework.web.context.request.async.DeferredResult;
|
| 47 | +import org.springframework.web.context.request.async.DeferredResultProcessingInterceptor; |
45 | 48 | import org.springframework.web.context.request.async.WebAsyncManager;
|
46 | 49 | import org.springframework.web.context.request.async.WebAsyncUtils;
|
47 | 50 | import org.springframework.web.servlet.ModelAndView;
|
|
54 | 57 | */
|
55 | 58 | final class DefaultAsyncServerResponse extends ErrorHandlingServerResponse implements AsyncServerResponse {
|
56 | 59 |
|
| 60 | + private static final DeferredResultProcessingInterceptor CLEAR_PATTERN_ATTRIBUTE_INTERCEPTOR = |
| 61 | + new DeferredResultProcessingInterceptor() { |
| 62 | + @Override |
| 63 | + public <T> void postProcess(NativeWebRequest request, DeferredResult<T> deferredResult, |
| 64 | + Object concurrentResult) { |
| 65 | + request.removeAttribute(RouterFunctions.MATCHING_PATTERN_ATTRIBUTE, |
| 66 | + RequestAttributes.SCOPE_REQUEST); |
| 67 | + } |
| 68 | + }; |
| 69 | + |
57 | 70 | static final boolean reactiveStreamsPresent = ClassUtils.isPresent(
|
58 | 71 | "org.reactivestreams.Publisher", DefaultAsyncServerResponse.class.getClassLoader());
|
59 | 72 |
|
@@ -128,6 +141,7 @@ static void writeAsync(HttpServletRequest request, HttpServletResponse response,
|
128 | 141 | WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
|
129 | 142 | AsyncWebRequest asyncWebRequest = WebAsyncUtils.createAsyncWebRequest(request, response);
|
130 | 143 | asyncManager.setAsyncWebRequest(asyncWebRequest);
|
| 144 | + asyncManager.registerDeferredResultInterceptors(CLEAR_PATTERN_ATTRIBUTE_INTERCEPTOR); |
131 | 145 | try {
|
132 | 146 | asyncManager.startDeferredResultProcessing(deferredResult);
|
133 | 147 | }
|
|
0 commit comments