インターフェース AsyncHandlerInterceptor
- すべてのスーパーインターフェース:
HandlerInterceptor
- すべての既知の実装クラス:
WebRequestHandlerInterceptorAdapter
HandlerInterceptor
を拡張します。 ハンドラーが非同期リクエストを開始すると、DispatcherServlet
は、通常の同期リクエストの場合と同様に、postHandle
および afterCompletion
を呼び出さずに終了します。これは、リクエスト処理の結果(ModelAndView など)がまだ準備ができておらず、別のスレッドから同時に生成されるためです。そのようなシナリオでは、代わりに afterConcurrentHandlingStarted(jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse, java.lang.Object)
が呼び出され、サーブレットコンテナーにスレッドを解放する前に実装がスレッドバインド属性のクリーンアップなどのタスクを実行できるようにします。
非同期処理が完了すると、リクエストはさらに処理するためにコンテナーにディスパッチされます。この段階で、DispatcherServlet
は preHandle
、postHandle
、afterCompletion
を呼び出します。非同期処理が完了した後の最初のリクエストと後続のディスパッチを区別するために、インターセプターは ServletRequest
EE の jakarta.servlet.DispatcherType
が "REQUEST"
であるか "ASYNC"
であるかを確認できます。
HandlerInterceptor
実装は、非同期リクエストがタイムアウトするか、ネットワークエラーで完了したときに機能する必要がある場合があることに注意してください。このような場合、サーブレットコンテナーはディスパッチしないため、postHandle
および afterCompletion
メソッドは呼び出されません。代わりに、インターセプターを登録して、WebAsyncManager
の registerCallbackInterceptor
および registerDeferredResultInterceptor
メソッドを介して非同期リクエストを追跡できます。これは、非同期リクエスト処理が開始されるかどうかに関係なく、preHandle
からのすべてのリクエストで事前に実行できます。
- 導入:
- 3.2
- 作成者:
- Rossen Stoyanchev
- 関連事項:
メソッドのサマリー
修飾子と型メソッド説明default void
afterConcurrentHandlingStarted
(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler) ハンドラーが同時に実行されている場合、postHandle
およびafterCompletion
の代わりに呼び出されます。インターフェース org.springframework.web.servlet.HandlerInterceptor から継承されたメソッド
afterCompletion, postHandle, preHandle
メソッドの詳細
afterConcurrentHandlingStarted
default void afterConcurrentHandlingStarted(HttpServletRequestEE request, HttpServletResponseEE response, ObjectSE handler) throws ExceptionSE ハンドラーが同時に実行されている場合、postHandle
およびafterCompletion
の代わりに呼び出されます。実装では、提供されたリクエストとレスポンスを使用できますが、ハンドラーの同時実行と競合する方法で変更しないでください。このメソッドの典型的な使用箇所は、スレッドローカル変数をクリーンアップすることです。
- パラメーター:
request
- 現在のリクエストresponse
- 現在のレスポンスhandler
- 型および / またはインスタンスの検査のために、非同期実行を開始したハンドラー(またはHandlerMethod
)- 例外:
ExceptionSE
- エラーの場合