public interface AsyncHandlerInterceptor extends HandlerInterceptor
HandlerInterceptor
with a callback method invoked during
asynchronous request handling.
When a handler starts asynchronous request handling, the DispatcherServlet
exits without invoking postHandle
and afterCompletion
, as it
normally does, since the results of request handling (e.g. ModelAndView)
will. be produced concurrently in another thread. In such scenarios,
afterConcurrentHandlingStarted(HttpServletRequest, HttpServletResponse, Object)
is invoked instead allowing implementations to perform tasks such as cleaning
up thread bound attributes.
When asynchronous handling completes, the request is dispatched to the
container for further processing. At this stage the DispatcherServlet invokes
preHandle
, postHandle
and afterCompletion
as usual.
WebAsyncManager
,
CallableProcessingInterceptor
,
DeferredResultProcessingInterceptor
Modifier and Type | Method and Description |
---|---|
void |
afterConcurrentHandlingStarted(HttpServletRequest request,
HttpServletResponse response,
Object handler)
Called instead of
postHandle and afterCompletion , when
the a handler is being executed concurrently. |
afterCompletion, postHandle, preHandle
void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
postHandle
and afterCompletion
, when
the a handler is being executed concurrently. Implementations may use the
provided request and response but should avoid modifying them in ways
that would conflict with the concurrent execution of the handler. A
typical use of this method would be to clean thread local variables.request
- the current requestresponse
- the current responsehandler
- handler (or HandlerMethod
) that started async
execution, for type and/or instance examinationException
- in case of errors