java - 当服务器抛出 IllegalArgrumentException 等应用程序异常时,预期响应是什么?

标签 java spring tomcat7 resteasy

当我发出休息请求并且服务器抛出应用程序异常(例如 IllegalArgumentException)时,我得到的响应为 http 状态 404

http 状态 500 的响应不是更好吗?

或者,当抛出应用程序异常时,实际的预期响应是什么? Resteasy、Spring 或 Tomcat 本身是否有一些默认行为?

我知道我可以使用 ExceptionMapper 来实现 Resteasy,但这真的是最佳实践还是有更好的选择?

我正在使用以下设置:

  • Spring
  • 安息
  • Tomcat 7

更新:

我面临的问题是我有 2 个 Web 应用程序,一个在抛出 IllegalArgumentException 时返回 http 状态 500,另一个返回 http 状态 400。我不明白为什么他们的行为不同。在我看来,这两个 Web 应用程序都有相同的 spring 和 Resteasy 配置。

当我调试时,我看到resteasy正在将IllegalArgumentException转换为org.jboss.resteasy.spi.UnhandledException,但响应和响应状态代码分别没有被触及。

因此,除了不知道哪个 http 状态代码是预期的状态代码(400,正如 Jon Skeet 和 Stefano Cazzola 已经指出的那样)之外,我也不知道为什么这 2 个 Web 应用程序的行为不同。

我在两个网络应用程序中都找不到任何resteasy ExceptionMapper。 那么resteasy、spring或tomcat中是否有一些默认行为,即将IllegalArgumentException映射到http状态404或http状态500?或者说这是怎么发生的?

最佳答案

响应代码与服务器中发生的错误相关。如果错误与从客户端收到的无效输入相关,则正式正确的响应状态为 400(错误请求)。与 500 的区别在于,返回 400 是服务器的正确行为:意味着服务器正确处理并响应错误,因为请求错误。如果重新提交相同的请求,它将收到相同的错误响应。服务器不应该纠正这个错误,这取决于客户端。

您可以采取this link作为引用

关于java - 当服务器抛出 IllegalArgrumentException 等应用程序异常时,预期响应是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359531/

相关文章:

java - 使用 spring restTemplate 对 REST API 进行基本身份验证

java - 类对象 getter 上的 @ConditionalonExpression

javac:包 org.apache.derby.client.am 不存在

java - 枚举的大小 <String>

java - 正在创建 Spring 多个 bean 实例

tomcat - 无法远程运行tomcat websocket示例

java - 可能的 fatal error :No fonts found-while setting sheet. autoSizeColumn

tomcat - 即使密码错误,信任库也能正常工作,为什么?

java - 如何通过远程方法发送数据

java - Android锁屏更换壁纸/背景图片