【问题标题】:is it correct to throw an exception when resource not found找不到资源时抛出异常是否正确
【发布时间】:2017-04-21 12:16:13
【问题描述】:

找不到请求的资源时,在服务器端抛出异常可以吗?

客户端收到 404 未找到。我担心的是在发生这种情况时在服务器端抛出异常是否正确/错误。

【问题讨论】:

  • 您如何定义“错误”?它违反了 REST 吗?它违反了OO吗?使用框架 X 时,它被认为是一种好/坏的做法吗?如果没有这个澄清,这个问题是相当主观的。
  • 您使用什么框架来创建您的 REST 应用程序?
  • 只要您适当地处理异常,即清理所有使用的资源并将服务器恢复到已知的良好状态,这是处理问题的有效方法,但绝不是唯一的方法。跨度>
  • @DesirePRG 它使用 JAX-RS API,不是吗?

标签: java rest exception


【解决方案1】:

很难假设您正在尝试对您添加到问题的详细程度进行什么操作。

但是,如果您正确处理异常,则该方法可能没有任何问题。看看一些框架使用的方法:

JAX-RS

Spring MVC

【讨论】:

    【解决方案2】:

    基本上,抛出保留的异常状态代码并不理想。您应该在内部处理此异常并准备您自己的代码,其中包含客户端应该知道实际问题的完整消息。

    【讨论】:

      【解决方案3】:

      从语义的角度来看:如果条件不可恢复并且必须通知开发人员,则应抛出异常。

      服务器无法在会话开始时解析身份验证请求 - 这是非常严重的情况,例外是适当的。

      用户未填写必填字段并尝试发送表单。这个问题是可以修复的,如果出现异常就是糟糕的设计。

      【讨论】:

      • 服务器无法验证用户,因为找不到具有用户 ID 的数据库 - 这是一场灾难:由于“找不到资源”情况,应用程序无法执行任何操作。是时候抛出异常了。
      • 如果广告在您合作伙伴的网站上停止工作 - 这也是“找不到资源”的情况。但这不是灾难。相反,这是一种祝福。在这种情况下不要抛出异常。
      【解决方案4】:

      我会说添加一个过滤器来捕获 404 并添加有关 404 详细信息的自定义信息。

      在纯 REST 实现的情况下,任何缺少资源 ID 和格式错误的 URL 都将返回 404。 就 REST 合同而言,这两种情况都是正确的,有 404 响应。但是有关缺少哪种类型的资源的更多详细信息将有助于使用它的客户端采取适当的措施。

      相关讨论: return-404-when-a-rest-resource-is-not-found

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-20
        相关资源
        最近更新 更多