如何根据具有 UNION 类型的架构验证 Json

时间:2021-07-04 12:00:11

标签: java json schema avro

以下是我的架构:

{
   "type":"record",
   "name":"UserCreatedEventData",
   "namespace":"com.sap.fsm.master.domain.event",
   "fields":[
      {
         "name":"emailAddress",
         "type":[
            "null",
            {
               "type":"string",
               "avro.java.string":"String"
            }
         ]
      },
      {
         "name":"id",
         "type":[
            "long"
         ]
      },
      {
         "name":"name",
         "type":[
            {
               "type":"string",
               "avro.java.string":"String"
            }
         ]
      }
   ]
}

这是我得到的记录:

{
   "emailAddress":"string",
   "name":"string",
   "id":0
}

我使用以下方法在 Java 中验证此记录:

@VisibleForTesting
boolean validateAvroSchemaWithValueTwo(String json, Schema schema) throws Exception {
    Map<String, Object> kafkaEvent = CustomRuleUtils.jsonStringToMap((String) json);
    GenericRecord genericRecord = new GenericData.Record(schema);
    for (Schema.Field field : schema.getFields()) {
        genericRecord.put(field.name(), kafkaEvent.get(field.name()));
    }
    GenericDatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(schema);
    boolean data = reader.getData().validate(schema, genericRecord);
    return data;
}

但是它总是返回false,有正确的记录。我怀疑这是因为架构中的 "avro.java.string":"String" 属性。在我的单元测试中,我包含了类型为 "type":["null", "string"] 的架构,但在运行时,这个 "avro.java.string":"String" 正在进入架构。

0 个答案:

没有答案
相关问题