Spring boot(kotlin)で起動しているgRPCサーバーからのgoogle.any型のレスポンスがgrpcurlで確認できない

2022/07/28に公開

問題

下記のようなAny型のフィールドを持つレスポンスをgrpcurlで受け取ると表示できない。

message Response {
  google.protobuf.Any value = 1;
}
//バイナリ表示される
$ grpcurl -plaintext -rpc-header localhost:8080 test.Hello.Hello
{
  "value": {
    "@type": "",
    "@error": " is not recognized; see @value for raw binary message data",
    "@value": "CgVIZWxsbw=="
  }
}

解決

https://github.com/fullstorydev/grpcurl/issues/193

grpcurlのissuesに似たようなのがあった。
言語によって振る舞いが違いそうだけど(goでサーバー書いたら普通に表示できた)、とりあえずレスポンスで返ってきたデータを型解決出来なくてエラーになってる的な話だと思う。
なのでファイル指定すれば解決できる。

$ grpcurl -import-path ./ -plaintext -proto ./test/hello.proto localhost:8080  test.Hello.Hello
{
  "value": {"@type":"type.googleapis.com/test.Response","value":"Hello"}
}
GitHubで編集を提案

Discussion