gpt4 book ai didi

spring - Spring MVC 中的 HandlerInterceptor.afterCompletion() 更改响应代码

转载 作者:IT老高 更新时间:2023-10-28 13:53:10 24 4
gpt4 key购买 nike

我正在使用 Spring MVC 框架。我想在抛出异常时记录错误状态,因此在 HanlderInterceptor 中使用了 afterCompletion 方法。

@Override
public void afterCompletion( final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex)
{
final int responseCode = response.getStatus();
s_logger_error.error("status code: " + responseCode );
}

如果我将其作为本地计算机上的应用程序运行,则此代码可以正常工作。但是当我们将它托管在 jetty 服务器上时,UI 会得到正确的错误响应(在我的例子中是 409),但在这种方法中它会被记录为 200

[来自远程调试的图像,其中显示 status=200 但响应为 409] enter image description here

有人可以帮忙弄清楚为什么响应代码会发生变化吗?

我正在使用 sprint 1.1.7.RELEASE spring boot 版本和 jetty-distribution-9.2.10.v20150310。

最佳答案

您需要确保在异常时调用 response 对象上的 setStatus 方法。

如果您断言这一点,那么升级到 Spring Boot 版本 1.1.11 可以解决您的问题。它与此有关fix .在修复之前,在 ErrorWrapperResponse 上未显式调用 sendError 方法的情况下,ErrorPageFilter 会屏蔽包装响应的响应状态。

修正后的代码changed从简单的return this.status

        if (this.errorToSend) {
return this.status;
}
else {
// If there was no error we need to trust the wrapped response
return super.getStatus();
}

这就是为什么我相信升级会解决您的问题。

最后,如果你发出persist,调试通过ErrorPageFilter应该指出问题的根源

关于spring - Spring MVC 中的 HandlerInterceptor.afterCompletion() 更改响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com