【问题标题】:Key in map fields cannot be float/double, bytes or message types映射字段中的键不能是浮点/双精度、字节或​​消息类型
【发布时间】:2017-01-14 16:45:42
【问题描述】:

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

例如响应:

 //java
 Map<key_object, Project>

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

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

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

在 proto3 中实现自定义对象键映射是否有任何替代方法?

【问题讨论】:

    标签: grpc proto proto3 grpc-java


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2021-06-20
    相关资源
    最近更新 更多