3

我正在使用 protobuf-gradle-plugin 从 proto 文件生成 java 类。

我的原型文件看起来像

syntax = "proto3";

package com.address;
option java_package = "com.address";


message AddressesMessage {
 int32 id = 1;
 string address_line_1 = 4;
 string address_line_2 = 5;
 string city = 7;
 string postal_code = 9;
 string country = 10;
}

该插件正在为我生成类,但现在我想在字段级别添加一些元数据信息。像

syntax = "proto3";

package com.address;
option java_package = "com.address";


message AddressesMessage {
 int32 id = 1 [ (meta) = { isfact: false }];
 string address_line_1 = 4;
 string address_line_2 = 5;
 string city = 7;
 string postal_code = 9;
 string country = 10;
}

这可能吗?

4

1 回答 1

1

是的,这可以通过自定义选项来实现,但是:您需要在单独的 proto2 模式中定义自定义选项,然后 proto3 模式会导入该模式。

类似于(对于您的 proto2 架构,未经测试):

syntax = "proto2";
import "google/protobuf/descriptor.proto";
package MetaPackage;
message MyMeta {
  optional bool isFact = 1;
}
extend google.protobuf.FieldOptions {
  optional MyMeta meta = 80412; // numbering: search for "One last thing" in the link above
}

然后只需添加:

import "MyMeta.proto";

到您的 proto3 架构,它应该可以工作。不过,访问元数据是另一个主题!请参阅上面的链接。

于 2020-03-05T07:25:12.633 回答