我们如何在 Kafka 生产者代码中访问 Avro Schema 的数组字段?

How can we access the array fields from Avro Schema in the Kafka producer code?

我有以下 Avro 模式:

    `{
      "name": "ABC",
      "type": "record",
      "namespace": "com.schema.avro",
      "fields": [
        {
          "name": "str1",
          "type": "string"
        },
        {
          "name": "arrData",
          "type":["null",
          {
            "type": "array",
            "items": {
              "name": "arrData_record",
              "type": "record",
              "fields": [
                {
                  "name": "var1",
                  "type": ["null","string"],
                  "default": null
                },
                {
                  "name": "var2",
                  "type": ["null","int"],
                  "default": null
                }
              ]
            }
          }
          ],
          "default": null
        }
      ]
    }`

我使用 POM.XML Maven 插件生成 classes。 以下 2 classes 是从插件生成的- 一)美国广播公司
ii) arrData_record

我可以使用 ABC 中的字段 str1,如下所示:

    ABC abc = ABC.newBuilder()
           .setStr1("random value")
           .build()

同样,我也可以选择使用 .setArrData()。

我想使用 .setVar1() 和 .setVar2() 以类似的方式设置数组字段。

如何使用数组 class 中的字段并进行类似设置?任何示例代码都会有很大帮助。

谢谢。

从 Avro 模式生成的 class 可以像这样操作

ABC
    .newBuilder()
    .setArrData(Collections.singletonList(arrData_record
        .newBuilder()
        .setVar1("Var1")
        .setVar2(2)
        .build()))
    .build();

尽管我接受了 Nic 的回答并且那个答案是正确的,但我最终还是使用了下面的代码,因为我想在 Var1 和 Var2 中添加多个值-

使用以下代码填充 arrData_record 的对象-

arrData_record a1 = arrData_record.newBuilder() .setVar1("abc") .setVar2(1) .build();

arrData_record a2 = arrData_record.newBuilder() .setVar1("def") .setVar2(2) .build();

将其添加到列表 arrData-

arrData.add(a1); arrData.add(a2);

终于添加了arrData-

ABC abc = ABC.newBuilder() .setStr1("随机值") .setarrData(arrData) .build()