sub*_*g26 16 spring jetty spring-mvc spring-boot
我正在使用spring MVC框架.我想在抛出异常时记录错误状态,因此使用afterCompletion方法HanlderInterceptor.
@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 );
}
Run Code Online (Sandbox Code Playgroud)
如果我在本地计算机上将其作为应用程序运行,此代码可以正常工作 但是当我们在jetty服务器上托管它时,UI会得到正确的错误响应(在我的情况下409),但在这种方法中,它会被记录为200.
[来自远程调试的图像显示status=200但是作为响应它409]

有人可以帮助弄清楚为什么响应代码有变化?
我正在使用sprint 1.1.7.RELEASE spring boot version和jetty-distribution-9.2.10.v20150310.
您需要确保在异常时调用对象setStatus上的方法response。
如果您断言这一点,那么升级到 spring boot 版本 1.1.11 可以解决您的问题。它涉及此修复。在修复之前,在未在 .NET 上显式调用方法的ErrorPageFilter情况下,会屏蔽包装响应的响应状态。sendErrorErrorWrapperResponse
修复后的代码由简单变为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();
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么我相信升级将解决您的问题。
最后,如果你的问题持续存在,调试通过ErrorPageFilter应该指出问题的根源
| 归档时间: |
|
| 查看次数: |
3069 次 |
| 最近记录: |