编辑:看起来我的观察结果是localhost和AWS都返回409是不正确的。 AWS返回500(我仍然期望返回null,因为Exception.class的@ExceptionHandler方法明确地将状态设置为500并返回null)。仔细观察异常消息,“无法检查JDBC自动提交模式;嵌套异常是org.hibernate.exception.GenericJDBCException:无法检查JDBC自动提交模式”,这看起来更像是数据库问题。
ORIGINAL:
我有一个用Java / Spring编写的RESTful服务。在这个服务中,我有3个@ExceptionHandler方法,所有返回null 。只有一个例外将状态设置为409 Conflict,这是我在当前场景中所期望的那个。
在localhost上使用Postman测试服务时,在特定情况下,我得到预期的与无数据正文的409冲突。但是,当我在amazonaws.com上部署后点击服务时,我得到409冲突的结果正文包含时间戳,状态,错误,异常和消息值。 / manage / info返回的版本看起来正确,并且报告的git提交数据完全相同。
localhost版本返回4个标题(加上自定义标题):
Amazon AWS版本返回5个标题(加上相同的自定义标题):
可能导致这种情况的原因是什么?我的应用程序调用服务〜可以处理任何一种情况,但是当服务本身显然出现奇怪的事情时,绑定修复似乎是错误的。它被编码为期望null,而不是由不属于非409结果的值组成的主体。
答案 0 :(得分:1)
导致这种情况的原因是什么?
很可能是您用来运行该服务的Web应用程序框架。它可能是框架软件(在本地计算机和AWS上)的固有差异,或者可能存在配置差异。
(我注意到您没有提到 您是如何在本地运行该服务的。)
我的应用程序调用服务〜可以处理任何一种情况,但是当服务本身显然出现奇怪的事情时,绑定修复似乎是错误的。它被编码为期望null,而不是由不属于非409结果的值组成的主体。
我不同意“显然有些奇怪的事情”正在发生。这是>> I<<<<<<<如果我试图在一系列不同的网络平台上运行Web服务,我会期待。特别是如果我采用“轻触”方法进行配置/部署。
您可能会使本地主机平台更像AWS一样处理错误响应,可能反过来。
但我认为简单的解决方案是更改客户端以使用两种错误响应。
我认为我的回答仍适用于您的更新问题。修改您的客户端代码以处理包含和不包含主体的错误响应。还需要记录意外响应的响应正文。