我有一个 tomcat 管理的 spring 应用程序。该应用程序使用 spring 异常处理程序来捕获和处理异常。发生这种情况时,我们将请求的响应状态重写为 400,例如。这是我们的处理程序的示例。
@ExceptionHandler({StepAlreadyInPlanException.class})
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public ErrorObject stepAlreadyInPlan(Exception ex) {
log.log(Level.ERROR, new Date().toString(), ex);
ErrorObject err = new ErrorObject();
err.setErrorCode(400);
err.setMessage("STEP_ALREADY_IN_PLAN_EXCEPTION");
return err;
}
这在我们使用 intelliJ 运行服务器的开发中非常有效。当我们在 tomcat 的生产设置中尝试相同的代码时,响应被吞没,我们在响应数据中只看到“BadRequest”。
如果我们更改代码,使 HTTP 状态 header 返回 OK,就像这样 @ResponseStatus(value = HttpStatus.OK)
。我们得到了完整的数据。
我怀疑 tomcat 是如何干扰请求并使我们的响应静音的。我如何配置 tomcat 让这种类型的数据通过?!
我最初怀疑这是 tomcat 重写,但在解决问题后我现在知道是 IIS 重写了 header 。
最佳答案
我认为您需要配置您的生产 Web 服务器(apache 服务器
或 IIS
...)而不是 tomcat。
您的网络服务器的某些配置会拦截 tomcat 错误响应并将其重定向到它自己的自定义页面。
您所要做的就是覆盖该配置或将其删除。
关于java - IIS 重写 BadRequest 响应数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33014927/