我有一个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重写了标题。
答案 0 :(得分:1)
我认为您需要配置您的生产网络服务器(apache server
或IIS
...)而不是tomcat。
您的某些网络服务器配置拦截了tomcat错误,并将其重定向到自己的自定义页面。
您所要做的就是覆盖该移民或删除它。
答案 1 :(得分:1)
也许你的应用程序配置为在出现错误时提供静态页面,这会导致Spring,servlet容器和静态Web服务器(如果有的话)之间发生冲突。
看看这个:
http://www.mkyong.com/spring-mvc/404-error-code-is-not-working-in-spring-mvc/
答案 2 :(得分:0)
我不得不重新配置IIS httperrors配置并将existingResponse设置为passTrough。