当前位置: 首页 > 知识库问答 >
问题:

将元数据添加到原型3中的字段以Java

江新
2023-03-14

Proto3已被简化,不再支持“必需”和“可选”字段(请参见为什么在协议缓冲区3中删除“必需”和“可选”)。是否仍有办法将某个字段标记为必填字段?我研究了FieldOptions(字段选项),并尝试了以下方法:

message MyMeta {
  bool isRequired = 1;
}

extend google.protobuf.FieldOptions {
   MyMeta meta = 1234;
}

message Person {
  string name = 1 [ (meta) = { isRequired: true }];
  string address = 2  [ (meta) = { isRequired: true }];
  string remarks = 3;
}

在将其编译成Java代码之后,当我检查编译的Java代码时,我没有看到字段与proto中指定的元数据之间的任何链接。我错过什么了吗?

共有2个答案

解宏扬
2023-03-14

不,该功能已被删除;改用留档。如果您尝试将FieldOptions用于自己的扩展,那么您可以制作自己的原型插件来生成补充代码(如验证实用程序)或在运行时使用原始反射(通过FOMessage.get描述符()描述符。Java中的FieldDescriptor.get选项())。

刁跃
2023-03-14

在进行了一些修补并使用了@Eric Anderson关于使用proto reflection的想法之后,下面是一种从人那里检索MyMeta的方法。名称字段:

    Descriptor rootDesc = PersonProto.getDescriptor();
    FieldDescriptor name = rootDesc.findFieldByName("name");
    FieldDescriptor ext = rootDesc.getFile().getExtensions().get(0);
    MyMeta meta = (MyMeta) name.getOptions().getField(ext);
    boolean isReq = meta.getIsRequired();
 类似资料:
  • 假设我想存储一些关于会议日程的信息,包括演示时间和暂停时间。我可以在中执行此操作。 但是,如果我还想存储每个块需要多少,以便,我不能只是将其添加为属性: 在Python中这样做的正确方法是什么?如果我创建了一个< code>__init__(self)方法,并将它作为一个实例变量存储在那里,但是它将是可变的。

  • 问题内容: 我在任何地方都找不到它,所以您的帮助对我非常有用:)这是该字段: FragmentCategory: 这是发送的表格: 我尝试过这样的事情: categories = fragmentCategory.objects.get(id=1), 要么: 问题答案: Django文档的整个页面都专门针对此内容,并从内容页面进行了索引。 如该页面所述,你需要执行以下操作: 要么

  • 我们知道有一个<代码>。JavaScript中数组的forEach()方法。但是字符串没有内置这个方法。 那么,关于以下代码片段是否有任何问题: ? 此设置帮助我对字符串使用。 上面的代码工作正常,并输出我的名字的所有字符。 你已经猜到我是JS的新手。

  • 问题内容: 我正在使用wtforms(和flask)生成动态表单。我想向正在生成的字段中添加一些自定义的CSS类,但是到目前为止,我一直无法这样做。使用在这里找到的答案,我尝试使用自定义小部件来添加此功能。它的实现方式与该问题的答案几乎完全相同: 在View中,我这样做是为了创建字段(ClassedTextField是从表单导入的,而f是基本表单的实例): 表单的其余部分均已正确创建,但此jinj

  • 本文向大家介绍silverstripe 将字段添加到DataObject,包括了silverstripe 将字段添加到DataObject的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用该DataExtension机制将额外的数据库字段添加到现有的DataObject中: 并应用扩展名: 这将HairColour作为字段添加到Member对象。

  • 我使用iText将数据填充到PDF中现有的AcroForm字段中。 我现在正在寻找将新的AcroForm字段添加到PDF的解决方案。iText是否可以做到这一点?如果是,我该如何做到这一点?