1

我有一项服务可以使用 protobuf 将对象的输入数组传递给服务器,并在服务器上成功接收它。问题是我根据响应定义得到了响应。这是回复

[ { uuid: '',
    quantity: 3,
    procurement_detail_uuid: '',
    distribution_officer_uuid: '',
    substore_uuid: '2343423443423' },
  { uuid: '',
    quantity: 3,
    procurement_detail_uuid: '',
    distribution_officer_uuid: '',
    substore_uuid: '676767' } ]

这是输入的定义

message ProcurementStockDistributionUpsertReqInput {
  string uuid = 1;
  int32 quantity = 2;
  string procurement_detail_uuid = 3;
  string distribution_officer_uuid = 4;
  string substore_uuid = 5;
}

如您所见,有些字段是空的。我考虑过使用oneof

如果您的消息包含许多可选字段,并且最多同时设置一个字段,则可以强制执行此行为并使用 oneof 功能节省内存。

我认为oneof这是选择传递具有值但遇到错误的字段的正确方法。然后我像这样回滚我的代码

service Procurement {
  rpc distributeUpsert (ProcurementStockDistributionUpsertReq) returns (ProcurementStockDistributionRes) {}
}

message ProcurementStockDistributionUpsertReq {
  message ProcurementStockDistributionUpsertReqInput {
    string uuid = 1;
    int32 quantity = 2;
    string procurement_detail_uuid = 3;
    string distribution_officer_uuid = 4;
    string substore_uuid = 5;
  }
  repeated ProcurementStockDistributionUpsertReqInput stocks = 1;
}

如何预先省略原型中的那些空字段

4

0 回答 0