Как использовать grp c Детали статуса в пакете io.grpc - PullRequest
0 голосов
/ 30 марта 2020

Я пишу java клиент, который общается с сервером, используя gRP C. Сервер (написанный на ржавчине) возвращает структурированные данные в случае ошибок, используя поле Status Details .

. Я вижу, что com.google.rpc.Status имеет getDetails метод доступа к типу «Любой». Тем не менее, мой сгенерированный код java вместе со всеми примерами клиентов gRP C java, которые я обнаружил, используют io.grpc.* и io.grpc.Status, не не имеют любой способ доступа Details.

Как я могу получить доступ к Сведениям? Либо с помощью io.grp c. *, Либо как-то изменив мой сгенерированный клиент grp c для использования com.google.rp c.

1 Ответ

1 голос
/ 30 марта 2020

google.rpc.Status распространяется через метаданные gRP C. Класс io.grpc.StatusProto имеет утилиты для обработки сообщений google.rpc.Status. Использование утилит важно, потому что они проверяют, что google.rpc.Status соответствует io.grpc.Status, чтобы избежать уязвимостей безопасности, вызванных смешиванием двух.

Перехватчик будет использовать StatusProto.fromStatusAndTrailers(Status, Metadata), а приложение будет использовать StatusProto.fromThrowable(Throwable). StatusRuntimeException в grp c - java включает в себя метаданные, поэтому статус можно извлечь.

Это связано с расширенной обработкой ошибок в gRP C answer .

...