IIS重写BadRequest响应数据

时间:2015-10-08 11:49:08

标签: java spring-mvc tomcat intellij-idea

我有一个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重写了标题。

3 个答案:

答案 0 :(得分:1)

我认为您需要配置您的生产网络服务器(apache serverIIS ...)而不是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。