映射字段中的键不能是float / double,字节或消息类型

时间:2016-09-07 06:10:29

标签: grpc proto proto3 grpc-java

我们计划将现有服务转移到移动grpc服务。所以需要将服务转换为proto Defined Message Type。在响应中,我们将自定义对象的映射作为键。

例如回复:

 //java
 Map<key_object, Project>

//proto
map<key_object_not_supported, Project> projects = 3;

在官方文件中,他们提到了,

  

其中key_type可以是任何整数或字符串类型(因此,任何标量   除了浮点类型和字节之外的类型)。 value_type可以是   任何类型

是否可以在proto3中实现自定义对象键映射的其他方法?

1 个答案:

答案 0 :(得分:3)

对地图的支持是一个相当新的扩展。如果您的密钥与约束条件不匹配,则可以使用旧方法:

定义密钥对消息并将其用作重复字段。所以,在你的例子中:

message KeyValuePair {
  key_object_not_supported key = 1;
  Project value = 2;
}

message MyMap {
  repeated KeyValuePair entries = 1;
}