自定义应用程序异常HTTP状态代码

时间:2014-02-13 22:51:50

标签: tapestry

我在this页面使用#3方法在生产模式下自定义应用程序异常页面,但我的错误页面返回200OK HTTP状态代码,而我希望它返回500内部服务器错误(如它在开发环境中。)

我不知道如何更改状态代码。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在默认使用的DefaultRequestExceptionHandler的handleRequestException实现中,您可以看到响应状态设置为500:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

您必须在代码中执行非常类似的操作(未经测试):

public RequestExceptionHandler decorateRequestExceptionHandler(final Logger logger, final ResponseRenderer renderer,
    final ComponentSource componentSource, final Response response,
    @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode, Object service) {
    if (!productionMode) return null;

    return new RequestExceptionHandler() {
        public void handleRequestException(Throwable exception) throws IOException {
            logger.error("Unexpected runtime exception: " + exception.getMessage(), exception);
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            ExceptionReporter index = (ExceptionReporter) componentSource.getPage("Index");

            index.reportException(exception);

            renderer.renderPageMarkupResponse("Index");
        }
    };
}