服务器抛出应用程序异常(如IllegalArgrumentException)时的预期响应是什么?

时间:2016-04-01 14:56:18

标签: java spring tomcat7 resteasy

当我发出休息请求并且服务器抛出像IllegalArgumentException这样的应用程序异常时,我得到 http状态404 的响应。

http状态500 的回复会不会更好?

或者抛出应用程序异常时实际上是什么样的预期响应?在resteasy,spring或tomcat本身有一些默认行为吗?

我知道我可以使用ExceptionMapper来实现resteasy,但这是最好的做法还是有更好的选择呢?

我正在使用以下设置:

  • spring
  • resteasy
  • tomcat 7

更新

我面临的问题是我有2个Web应用程序,一个返回http状态500,另一个在抛出IllegalArgumentException时返回http状态400。我无法弄清楚他们为什么表现不同。在我看来,两个Web应用程序都具有相同的弹簧和重新配置。

当我调试时,我发现resteasy正在将IllegalArgumentException转换为org.jboss.resteasy.spi.UnhandledException,但不会触及响应和响应状态代码。

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

我无法在两个Web应用程序中找到任何重新安装的ExceptionMapper。 那么在resteasy,spring或tomcat中是否存在一些默认行为,即将IllegalArgumentException映射到http状态404或http状态500?或者这怎么可能发生?

1 个答案:

答案 0 :(得分:1)

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

您可以将this link作为参考