映射字段中的键不能是浮点/双精度、字节或​​消息类型

Par*_*mal 4 proto grpc proto3 grpc-java

我们正计划将我们现有的服务迁移到 grpc 服务。所以需要将服务转换为原型定义的消息类型。在响应中,我们以自定义对象为键进行映射。

例如回应:

 //java
 Map<key_object, Project>

//proto
map<key_object_not_supported, Project> projects = 3;
Run Code Online (Sandbox Code Playgroud)

在官方文档中,他们提到,

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

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

Phi*_*ßen 7

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

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

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

message MyMap {
  repeated KeyValuePair entries = 1;
}
Run Code Online (Sandbox Code Playgroud)