Jersey EHCache和DropWizard:不返回响应

Jersey EHCache和DropWizard:不返回响应,jersey,ehcache,dropwizard,Jersey,Ehcache,Dropwizard,我已成功地将SimplePageCachingFilter与DropWizard集成 然而,有一件事阻碍了我。每当抛出应用程序中的异常时,API浏览器中就会出现“Response contains no data”(响应不包含数据),而不是将异常路由到ExceptionMapper。我也碰巧在日志中看到了这一点。 WARN[2015-02-12 04:06:21768]net.sf.ehcache.constructs.web.GenericResponseWrapper:丢弃消息,因为此方法已

我已成功地将SimplePageCachingFilter与DropWizard集成

然而,有一件事阻碍了我。每当抛出应用程序中的异常时,API浏览器中就会出现“Response contains no data”(响应不包含数据),而不是将异常路由到ExceptionMapper。我也碰巧在日志中看到了这一点。
WARN[2015-02-12 04:06:21768]net.sf.ehcache.constructs.web.GenericResponseWrapper:丢弃消息,因为此方法已被弃用。

传统上,我的ExceptionMapper返回适当的Json响应


还有人见过类似的东西吗

我会在第1472行设置一个断点,然后触发您的错误

这就是抛出一个异常,异常到异常映射器的映射发生在堆栈中更深一点的catch中。可能在ContainerResponse.mapException中

希望这能让你充分了解为什么它没有被调用


仅供参考。我是通过在被触发的异常映射器中放置一个断点并查看调用堆栈来获得该代码的。

在将调试器附加到DropWizard(per@CAB的建议)后,我发现除非状态代码为200,否则CachingFilter不会写出响应

我扩展了CachingFilter并重写了
doFilter
方法,并忽略了状态检查。这似乎解决了我的问题

@Override
protected void doFilter(final HttpServletRequest request,
                        final HttpServletResponse response, final FilterChain chain) throws Exception {
    if (response.isCommitted()) {
        throw new AlreadyCommittedException("Response already committed before doing buildPage.");
    }
    logRequestHeaders(request);
    PageInfo pageInfo = buildPageInfo(request, response, chain);

    writeResponse(request, response, pageInfo);
}

非常感谢,我去看看!感谢您的帮助,在进一步调试之后,我在默认的CachingFilter中发现了一个阻止写入响应的检查。享受赏金吧!:)