如何在 gRPC 响应中打印所有 protobuf 字段,即使是空的
Posted
技术标签:
【中文标题】如何在 gRPC 响应中打印所有 protobuf 字段,即使是空的【英文标题】:How to print all protobuf fields in gRPC response, even when empty 【发布时间】:2021-06-04 02:49:50 【问题描述】:我正在编写一个带有 protobuf 定义的 gRPC 服务,如下所示:
message MyRequest
message MyResponse
string username = 1;
repeated string schools = 3;
service MyService
rpc Service(MyRequest) returns (MyResponse)
服务返回当前用户的学校列表。有时用户没有学校,我希望 schools
字段中的响应为空列表,但响应中缺少该字段。
我需要做什么才能让schools
字段始终出现在响应中,即使它是一个空列表?
【问题讨论】:
【参考方案1】:在协议缓冲区中,重复字段只是一个具有多个在线发送值的字段。使用这种编码,“空”和“不存在”之间没有区别。
如果您需要区分空和“不存在”,您需要将重复字段包装在其自己的消息中并检查该消息是否存在。
message MyRequest
message MyResponse
string username = 1;
Schools schools = 2;
message Schools
repeated string names = 1;
service MyService
rpc Service(MyRequest) returns (MyResponse)
myResponse.hasSchools() == false
表示“不存在”。
【讨论】:
以上是关于如何在 gRPC 响应中打印所有 protobuf 字段,即使是空的的主要内容,如果未能解决你的问题,请参考以下文章
教你使用ProtoBuf,通过gRPC服务在Android上进行网络请求
如何为 gRPC 生成的 Java 代码实现 com.google.protobuf.BlockingRpcChannel?