java - Spring Boot gRPC : How to return error code when business error happens?

标签 java spring spring-boot grpc grpc-java

我正在使用 LogNet grpc-spring-boot-starter 实现 gRPC API 。

例如,当传递了不正确的参数时,我想返回 INVALID_ARGUMENT 错误代码。

如果我抛出自定义异常,最终会出现 io.grpc.StatusRuntimeException: UNKNOWN

问:是否可以定义一些异常处理机制,以便特定类型的异常始终导致正确的 gRPC 状态?

不幸的是,项目中没有那么多文档。

最佳答案

gRPC 不鼓励您抛出异常来将该错误传达给用户。这是因为意外泄露您可能没有考虑过发送给客户的信息是微不足道的。

相反,我们鼓励您将 StatusExceptionStatusRuntimeException 传递给 streamObserver.onError(Throwable)。如果您在自己的代码中使用异常来传达此信息,则可以在代码中放置 try-catch 并将异常传递给 onError()。例如,这对于 StatusException 可能是公平的,因为它是一个受检查的异常。

TransmitStatusRuntimeExceptionInterceptor它将在回调期间捕获异常,如果是 StatusRuntimeException,则使用异常状态关闭调用。这与您的要求非常匹配,但默认情况下并未故意启用它。

关于java - Spring Boot gRPC : How to return error code when business error happens?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904503/

相关文章:

spring - DefaultMessageListenerContainer 未接收消息

java - 在 spring boot 应用程序上增加 max-http-header-size 是否有危险/影响?

java - 如何在 Java 中检查某一天是否在本周?

java - Scalac 解析 Java 代码的永久隐藏警告 - 编译器错误?

java - 为什么需要调用父类(super class)构造函数?

java - 如何在 JSF 中从 Java 代码添加 JS 文件?

mysql - 在 Spring Boot 和 Hibernate 应用程序中使用 XtraDB 作为存储引擎

java - Spring Batch 的 ItemWriter 是单例类吗?

java - cvc-complex-type.2.4.c:匹配的通配符是严格的,但是找不到元素 'hdp:configuration'的声明

java - Spring Boot 中的自定义异常