我正在使用 LogNet grpc-spring-boot-starter 实现 gRPC API 。
例如,当传递了不正确的参数时,我想返回 INVALID_ARGUMENT
错误代码。
如果我抛出自定义异常,最终会出现 io.grpc.StatusRuntimeException: UNKNOWN
。
问:是否可以定义一些异常处理机制,以便特定类型的异常始终导致正确的 gRPC 状态?
不幸的是,项目中没有那么多文档。
最佳答案
gRPC 不鼓励您抛出异常来将该错误传达给用户。这是因为意外泄露您可能没有考虑过发送给客户的信息是微不足道的。
相反,我们鼓励您将 StatusException
或 StatusRuntimeException
传递给 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/