返回介绍

状态 - 类StatusException

发布于 2020-09-14 13:14:42 字数 3375 浏览 1183 评论 0 收藏 0

gRPC中定义了两个和 Status 相关的异常,分别是 StatusException 和 StatusRuntimeException。以异常的实行来表示并传递状态信息。

类StatusException

代码足够简单,继承自Exception,通过传递一个 Status 对象实例来构建,并从Status对象实例中获取异常信息。

  1. public class StatusException extends Exception {
  2. private static final long serialVersionUID = -660954903976144640L;
  3. private final Status status;
  4. private final Metadata trailers;
  5. public StatusException(Status status) {
  6. this(status, null);
  7. }
  8. @ExperimentalApi
  9. // 使用状态和跟踪元数据来构建 exception
  10. // 这个方法是 1.0.0-pre2 之后才增加的
  11. public StatusException(Status status, @Nullable Metadata trailers) {
  12. super(Status.formatThrowableMessage(status), status.getCause());
  13. this.status = status;
  14. this.trailers = trailers;
  15. }
  16. public final Status getStatus() {
  17. return status;
  18. }
  19. }

Status.formatThrowableMessage()方法用于从 Status 中获取异常的 message 信息:

  1. 异常的message

    通过 Status 的formatThrowableMessage()方法从Status中得到message。

    formatThrowableMessage()方法的具体实现代码:

    1. static String formatThrowableMessage(Status status) {
    2. if (status.description == null) {
    3. // 如果没有description,则直接取code.toString()
    4. // code是一个枚举,code.toString()方法里面取的是枚举的name属性
    5. // 也就是 INVALID_ARGUMENT 之类的字符串
    6. return status.code.toString();
    7. } else {
    8. // 如果有description,则将code(同上实际是枚举的name)和description拼起来
    9. return status.code + ": " + status.description;
    10. }
    11. }
  2. 异常的casue:直接取Status对象的casue

类StatusRuntimeException

代码和实现与StatusException完全一致,只是继承的是RuntimeException。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文