2.21.4. 异步过滤器
如果必须暂停执行过滤器直到有特定资源可用,您可以将其转换为异步过滤器。关闭请求异步不需要对您的资源方法声明或额外的过滤器声明进行任何更改。
要将过滤器的执行异步切换,您必须进行 cast:
-
ContainerRequestContext to
SuspendableContainerRequestContext
用于 pre 和 post 请求过滤器。 -
ContainerResponseContext
转换为用于响应过滤器的 SuspendableContainerResponseContext
。
这些上下文对象可以通过调用 suspend()
方法将当前过滤器的执行转换为异步。异步后,过滤器链会被暂停,只有在上下文对象中调用以下方法之一后才会恢复:
-
abortWith(Response)
:终止过滤器链,将给定的 Response 返回给客户端。这只适用于 ContainerRequestFilter。 -
restore()
:通过调用下一个过滤器来恢复过滤器链的执行。 -
Restore(可浏览)
:通过抛出给定异常来中止执行过滤器链。这的行为就像过滤器是同步的,并且三个给出的异常。