当前位置: 首页 > 知识库问答 >
问题:

Jersey REST API中错误处理的最佳实践

曾新立
2023-03-14

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

泽西文档:https://Jersey.java.net/nonav/documentation/1.9/user-guide.html#D4E443

Internet上的几个搜索:http://www.codingpedia.org/ama/error-handing-in-rest-api-with-jersey/

http://howtodoinjava.com/jersey/jax-rs-jersey-custom-exception-handing-with-exceptionmapper/I假定未处理的异常已经被框架作为500响应代码处理了,所以不理解上面示例的要点。

此外,我读到许多关于不同方法的讨论,即使错误条件发送200个响应,但它是空的,而且很少人发送明确的代码,似乎没有一个“标准”,这导致我提出这个问题,从“专家”那里寻求最佳实践。

共有1个答案

西门梓
2023-03-14

与最终用户交流错误是API设计的一个非常重要的部分。我建议使用JAX-RS ExceptionMapper机制轻松地将异常映射到清除错误消息。

我喜欢做的是将所有可以退出服务的异常分组在两个类别下。

这些异常100%是由用户输入引起的,服务无法避免它们。

    null

它们应该以4xx错误代码的形式返回,并附上一条信息,清楚地解释问题的原因,并可能暗示解决方案。

这些异常100%是由应用程序的当前状态造成的,客户端无法避免它们。

示例:

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

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

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

 类似资料:
  • 问题内容: 我想知道 在go中处理多层抽象错误 的最佳方法是什么。每当我必须在程序中添加新的级别抽象时,都必须将错误代码从较低级别传输到较高级别。从而日志文件中有重复的通讯,或者我必须记住删除低级别的通讯形式并将其转移到更高级别。下面简单地举例。我跳过了创建每个对象的简短代码,但是我认为您理解我的问题 结果在日志文件中,我得到重复的帖子 反过来,如果我仅将某些部分转移到更高的级别而没有其他日志,那

  • 问题内容: 现在我的页面看起来像这样: 我的工作方式可行,但是对于显而易见的事情却非常繁琐和乏味:假设我在代码中间的某个地方调用了一个函数,或者想检查变量的值,或者验证数据库查询返回有效结果,如果失败,我想输出错误?我将不得不制作另一个if / else块,并将所有代码移到新的if块内。这似乎不是一种明智的处理方式。 我一直在阅读有关try / catch的内容,并一直在考虑将我的所有代码放入tr

  • 问题内容: 如果我的应用程序崩溃了,它会挂起几秒钟,然后Android告诉我该应用程序崩溃了,需要关闭。所以我当时想用通用的方式捕获应用程序中的所有异常: 并做一个新的解释,说明应用程序立即崩溃(并且还使用户有机会发送包含错误详细信息的邮件),而不是由于Android而造成了延迟。是否有更好的方法来实现这一目标? 更新: 我使用的是启用了ART的Nexus 5,但我没有注意到我以前遇到的崩溃(我最

  • 问题内容: 几天前我才开始尝试使用node.js。我意识到只要程序中有未处理的异常,Node就会终止。这与我所见过的普通服务器容器不同,在普通服务器容器中,当发生未处理的异常时,只有工作线程死亡,并且容器仍然能够接收请求。这引起了一些问题: 是唯一有效的预防方法吗? 在执行异步过程期间也会捕获未处理的异常吗? 是否存在已经构建的模块(例如发送电子邮件或写入文件),在未捕获的异常的情况下可以利用该模

  • 并创建一个新的,解释应用程序立即崩溃(并给用户发送包含错误详细信息的邮件的机会),而不是由于Android造成的延迟。有没有更好的方法来实现这一点,或者这是不鼓励的? 更新:我使用的Nexus 5启用了ART功能,我没有注意到应用程序崩溃时的延迟(我最初说的“挂起”)。我想既然现在一切都是本机代码,崩溃就会立即发生,同时得到所有的崩溃信息。也许Nexus5只是速度很快:)不管怎样,这在未来的And

  • 因此,我有一个Javascript脚本,它在一个循环中将小的分数相加,它有可能将0.2加到0.1。然后,这个值被输入到另一个函数,但问题是,我需要0.3来精确输入,而不是0.3000000000000004。 什么是最简单的方法,以确保数字是正确和准确的。注意,它可能得到0.25+0.125等,被添加到简单的四舍五入到小数点1不会解决问题。 也有可能添加0.2+0.1000000000000000