3

我有具有以下功能的 GRPC 服务:

rpc StreamMessages(StreamMessagesRequest) returns (stream google.protobuf.StringValue) {
    option (google.api.http) = {
        post: "/messages:stream"body: "*"
    };
}

背后有grpc-gateway 。

一旦我收集了 3 个字符串:“msg1”、“msg2”、“msg3” - 将每个字符串包装为 com.google.protobuf.wrappers.StringValue 并作为流返回。在 GRPC 方面一切正常,但是当我尝试通过网关执行 REST 请求时,问题发生了:

根据文档,google.protobuf.StringValue 的 Json 表示只是 JsonString,因此预期的流式传输结果是:

"msg1"
"msg2"
"msg3"

但它会返回意外的格式:

{"result":"msg1"}
{"result":"msg2"}
{"result":"msg3"}

问题:如何使网关返回预期?

4

1 回答 1

0

为了获得您要查找的内容,您需要使用 protobuf 特定包进行 json 封送处理。而不是标准的,使用这个:google.golang.org/protobuf/encoding/protojson.

接口是相同的,但它会在提供实际值时正确地将 StringValues 编组为字符串,并且如果 StringValue 指针为 nil,则忽略字段。

于 2021-12-21T14:12:29.583 回答