3

I have GRPC service with the following function:

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

With grpc-gateway behind it.

Once I have collection of 3 strings: "msg1", "msg2", "msg3" - wrapping every one as com.google.protobuf.wrappers.StringValue and returning as stream. On GRPC side everything fine, but when I'm trying to execute REST request via gateway the issue happens:

According to documentation, Json representation of google.protobuf.StringValue is just JsonString, so expected streaming result is:

"msg1"
"msg2"
"msg3"

But it returns unexpected format instead:

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

Question: How can I cause gateway to return the expected?

Alex Volmir
  • 121
  • 1
  • 7

1 Answers1

1

In order to obtain what you're looking for you need to use the protobuf specific package for the json marshaling. Instead of the standard one, use this one: google.golang.org/protobuf/encoding/protojson.

The interface is the same, but it correctly marshals StringValues to strings when an actual value is provided and the fields get ignored if the StringValue pointer is nil.

bogdanciobanu
  • 1,603
  • 1
  • 12
  • 14