Jersey REST API中

时间:2016-08-18 22:47:51

标签: rest error-handling jersey

我已经使用Jersey 1.9返回json实现了REST API,直到现在我没有做任何明确的错误处理,并且框架似乎很好地处理它。

现在我打算创建一个"应用程序"更好的错误处理框架,我试图寻找最佳实践,但没有找到任何

泽西岛文件: https://jersey.java.net/nonav/documentation/1.9/user-guide.html#d4e443

很少在互联网上搜索: http://www.codingpedia.org/ama/error-handling-in-rest-api-with-jersey/

但我不喜欢这个,因为我们只是捕捉所有异常格式化和重新抛出,我没有看到很多价值。

http://howtodoinjava.com/jersey/jax-rs-jersey-custom-exceptions-handling-with-exceptionmapper/ 我假设unhandeled异常已被框架作为500响应代码处理,所以不要看上面的例子。

此外,我还阅读了很多关于不同方法的讨论,其中即使错误条件以200响应发送,但其空白且很少人发送显式代码,似乎没有"标准"这导致我提出这个问题,寻求专家"

的最佳实践

1 个答案:

答案 0 :(得分:5)

与最终用户沟通错误是API设计中非常重要的一部分。我建议使用JAX-RS ExceptionMapper机制轻松映射异常以清除错误消息。

我喜欢做的是将所有可以退出服务的例外分组。

客户端异常

这些例外是100%由用户输入引起的,并且服务可以做 nothing 以避免它们。

示例:

  • 凭据无效
  • 缺少必需参数
  • 无效的JSON正文

它们应该以4XX错误代码的形式返回,并带有明确说明问题原因并可能暗示解决方案的消息。

服务器端异常

这些例外是100%由应用程序的当前状态引起的,客户端无法做任何事情来避免它们。

示例:

  • 数据库目前已关闭
  • 临时网络问题
  • 应用程序错误

它们应作为5XX错误代码返回,并显示一条消息,说明服务存在问题,客户端应稍后重试。这些是严重的问题,需要迅速解决。

随着您的应用程序的成熟,您很可能会找到避免诉诸这些错误的方法。例如。在数据库不可用时,通过回退到基于缓存的只读模式。

其他

应在您的应用程序逻辑中处理所有其他异常。如果不需要将它们传达给最终用户,则它们不应该有ExceptionMapper,也不应该到达Jersey层。