java - 如何针对具有 UNION 类型的模式验证 Json
问题描述
以下是我的架构:
{
"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;
}
但是它总是返回错误,有正确的记录。我怀疑这是因为"avro.java.string":"String"
模式中的属性。在我的单元测试中,我包含了具有"type":["null", "string"]
有效类型的模式,但在运行时这"avro.java.string":"String"
是在模式中出现的。
解决方案
推荐阅读
- javascript - 如何在 arc.centroid() 上为 D3 和弦图组弧添加标签?
- sql-server - T-SQL GroupBy 具有总计数值和基于数字范围的组平均值
- r - 调整主面板在 Shiny 中的位置
- javascript - 在新标签页中打开链接的按钮
- html - HTML/CSS 中间错误 .hover/nav 错误、@media 错误、nav/aside CIS122
- r - 获取R中括号零的两个值的索引
- python - Doc2vec 仅输出单个文档而不是两个文档向量的数据
- powerbi - Power BI - 参考结果集中的其他行以确定是否显示行
- r - r markdown 未编译
- python - 使用 Python 正则表达式忽略字符串中的 `:`