如何为重复字段的字段指定字段掩码?

How do I specify field masks for a field of a Repeated Field?

假设您有一个定义如下的原型:

message Zoo {
    repeated Cat cats = 1;
}

假设猫长这样:

message Cat {
    google.protobuf.StringValue name = 1
    Decimal age = 2;
}

如果我想减少 Zoo 中的数据量,使示例数据仅包含 Cat 和名称字段,我该怎么做?

示例: 示例 Zoo 对象将如下所示:

{
    Cat: [{
        name = "sam";
    },
    {
        name = "hester";
    }]
}

我正在尝试使用一个字段掩码来执行此操作:

FieldMask zoo_mask = FieldMask.newBuilder()
    .addPaths("cats")
    .build();

Zoo getMaskedZoo(FieldMask mask, Zoo zoo) {
    Zoo.Builder zooDest = Zoo.newBuilder();
    FieldMaskUtil.merge(zoo_mask, zoo, zooDest);
    return zooDest.build();
}

如何才能让每个 Cat 只显示名称?

我刚刚检查了 Java implementation,Java 不支持它,因为 cats 是一个重复的字段。 c-core.

也不支持

您最好的选择是使用反射来实现您的目标。

来自FieldMask documentation

A repeated field is not allowed except at the last position of a field mask.