如果在控制器中某处引发异常,是否执行ContainerResponseFilter?

jay*_*ity 5 jax-rs resteasy

我有一个基于RestEasy的服务,其中正在ContainerResponseFilter中进行一些清理工作。问题是,如果资源抛出了未知的运行时异常(即我没有映射器的异常),则ContainerResponseFilter永远不会执行。

这是预期的行为吗?有没有解决方法?我在看以下问题(乔纳斯的回答):
如何在RESTful JAX-RS Web服务中记录未捕获的异常?

并且即使在控制器中引发异常时,看起来好像也会执行ContainerResponseFilter吗?

我想念什么吗?

icy*_*sor 0

也不适合我。这声称它应该有效:https://github.com/Graylog2/graylog2-server/issues/1826

我不想进一步调查,只是使用普通的旧 javax.servlet.Filter,但是当然很难设置响应头(在 chain.doFilter() 之后,... grr ..

所以使用了Spring的解决方案:

public static class MyFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        response.setHeader("MyHeader", "MyValue");
        filterChain.doFilter(request, response);
    }
}
Run Code Online (Sandbox Code Playgroud)