我有一个Servlet过滤器,它在过滤器链之前和之后执行操作,如:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain){
// I do some stuff here...
chain.doFilter(req, res);
// ... and then I do some more stuff here.
}
我正在将其转换为Ratpack应用程序,并且已经找到了如何使用Handlers作为过滤器(通常)
class MyHandler implements Handler {
void handle(Context ctx){
// so some stuff...
context.next()
}
}
但是对next()
的调用是非阻塞的,因此后续操作会立即执行,而不是在其他处理程序执行之后执行。
如何在Ratpack中的代码行为之前和之后得到这个?
答案 0 :(得分:4)
根据你的“后”逻辑的作用以及你是否已经在“后”逻辑之前呈现响应,你可以使用context.onClose()
class MyHandler implements Handler {
void handle(Context ctx){
// so some stuff...
context.onClose(requestOutcome -> {
// do some more stuff...
})
context.next()
}
}