【发布时间】:2017-05-09 14:17:16
【问题描述】:
我试图拦截 GRPC 存根抛出的异常 io.grpc.StatusRuntimeException,并将它们转换为 REST 异常。我需要实现 ClientInterceptor 不知道如何实现?
【问题讨论】:
我试图拦截 GRPC 存根抛出的异常 io.grpc.StatusRuntimeException,并将它们转换为 REST 异常。我需要实现 ClientInterceptor 不知道如何实现?
【问题讨论】:
你不能在拦截器中。 gRPC 存根和核心库会将异常重新映射到 StatusRuntimeException。拦截器旨在让您修改请求和响应,但仍通过 gRPC API 显示。
您可以编写自己的存根包装器(可能使用 AbstractStub)来重新映射这些异常。
【讨论】:
我遇到了同样的问题,但无法完成,因为 onMessage 方法会将任何可抛出的对象捕获到 StatusRuntimException 中,并且状态将被取消。
https://github.com/grpc/grpc-java/issues/3434
所以在我的例子中,服务器和客户端应该使用某种标准,比如代码(HTTP CODE)和消息。所以在服务层,检查响应代码是否!= 200 然后从服务器的代码和消息中抛出你的异常
我的帖子也被Carl Mastrangelo回复了:)
【讨论】: