【问题标题】:IIS rewrites BadRequest response dataIIS 重写 BadRequest 响应数据
【发布时间】: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


    【解决方案1】:

    我不得不重新配置 IIS httperrors 配置并将现有响应设置为 passTrough。

    【讨论】:

      【解决方案2】:

      也许您的应用程序被配置为在出现错误时提供静态页面,这会导致 Spring、您的 servlet 容器和您的静态 Web 服务器(如果有的话)之间发生冲突。

      看看这个:

      http://www.mkyong.com/spring-mvc/404-error-code-is-not-working-in-spring-mvc/

      【讨论】:

        【解决方案3】:

        我认为您需要配置生产网络服务器(apache serverIIS...)而不是 tomcat。

        您的网络服务器的某些配置会拦截 tomcat 错误响应并将其重定向到自己的自定义页面。

        您所要做的就是覆盖该配置或将其删除。

        【讨论】:

        • 我将如何在 IIS 中执行此操作?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多