以下是我的模式:
{
"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"
正在以模式显示。
暂无答案!
目前还没有任何答案,快来回答吧!