【发布时间】:2016-01-06 00:35:36
【问题描述】:
我有一个 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 状态标头返回 OK,就像 @ResponseStatus(value = HttpStatus.OK) 一样。我们得到了完整的数据。
我怀疑 tomcat 会干扰请求并使我们的响应保持沉默。如何配置 tomcat 让这种类型的数据通过?!
我最初怀疑这是 tomcat 重写,但在解决问题后,我现在知道是 IIS 重写了标头。
【问题讨论】:
标签: java spring-mvc tomcat intellij-idea