Spring Boot gRPC:发生业务错误时如何返回错误代码?

Sas*_*ota 5 java spring spring-boot grpc grpc-java

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

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

如果我抛出一个自定义异常,它会以io.grpc.StatusRuntimeException: UNKNOWN.

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

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

Eri*_*son 6

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

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

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