【问题标题】:REST endpoint returns different results in AWS vs. localhostREST 端点在 AWS 与 localhost 中返回不同的结果
【发布时间】:2015-05-28 11:37:18
【问题描述】:

编辑: 看来我观察到 localhost 和 AWS 都返回 409 是不正确的。 AWS 返回 500(我仍然希望返回 null,因为 Exception.class 的 @ExceptionHandler 方法清楚地将状态设置为 500 并返回 null)。仔细查看异常消息,“无法检查 JDBC 自动提交模式;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法检查 JDBC 自动提交模式”,这看起来更像是数据库问题。

原文:

我有一个用 Java/Spring 编写的 RESTful 服务。在这个服务中,我有 3 个 @ExceptionHandler 方法,所有这些方法都返回 null。只有一个异常将状态设置为 409 Conflict,这是我在当前场景中所期望的。

在本地主机上使用 Postman 测试服务时,在特定情况下,我得到了预期的 409 Conflict with no data body。但是,当我在 amazonaws.com 上部署后点击该服务时,我得到了 409 冲突,结果正文由时间戳、状态、错误、异常和消息 值组成。 /manage/info 返回的版本看起来是正确的,并且报告的 git commit 数据完全相同。

localhost 版本返回 4 个标头(加上一个自定义标头):

  • 内容长度 = 0
  • 日期 =(今天)
  • 服务器 = Apache-Coyote/1.1
  • X-Application-Context = 应用程序

Amazon AWS 版本返回 5 个标头(加上相同的自定义标头):

  • Content-Type = application/json;charset=UTF-8
  • 日期 =(今天)
  • 服务器 = Apache-Coyote/1.1
  • 传输编码 = 分块
  • X-Application-Content = 应用程序,应用程序

这可能是什么原因造成的?我调用服务的应用程序〜可以处理任何一种情况,但是当服务本身显然发生了一些奇怪的事情时,在那里进行修复似乎是错误的。它被编码为期望 null,而不是由不属于非 409 结果一部分的值组成的主体。

【问题讨论】:

  • 太棒了!看来我忽略了什么。从 AWS 服务器返回的响应不是我最初所说的 409,而是 500。我怀疑这个问题可能已经关闭。我正在更新问题。

标签: java spring rest amazon-web-services


【解决方案1】:

这可能是什么原因造成的?

这很可能是您用来运行服务的网络应用程序框架。这可能是框架软件的固有差异(在您的本地计算机和 AWS 上),或者可能存在配置差异。

(我注意到您没有提到如何在本地运行服务。)

我调用服务的应用程序~可以~处理任何一种情况,但是当服务本身显然发生了一些奇怪的事情时,在那里进行修复似乎是错误的。它被编码为期望 null,而不是由不属于非 409 结果一部分的值组成的主体。

我不同意“显然有些奇怪”正在发生。如果我尝试在一系列不同的 Web 平台上运行 Web 服务,这就是 >>I

您可以让本地主机平台更像 AWS 那样处理错误响应,也可能反过来。

但我认为简单的解决方案是更改客户端以处理这两种错误响应。


我认为我的回答仍然适用于您更新的问题。修改您的客户端代码以处理带有和不带有正文的错误响应。记录意外响应的响应正文也是值得的。

【讨论】:

  • 我通过 Eclipse 在本地运行,作为 Spring Boot 应用程序。
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
  • 2019-12-27
  • 2015-08-13
相关资源
最近更新 更多