ReflectData
从表示json响应的POJO创建我的模式。
然后我使用ReflectDatumReader将json转换为avro字节,反之亦然。
我面临的问题与我得到的json回应有关。响应可以根据发送的消息类型而改变。
即
{
"id": 001,
"text": {
"type": "comment",
"event": "event",
"comment": {
...
}
但这也可以是
{
"id": 001,
"text": {
"type": "status",
"event": "event",
"status": {
...
}
因此,您可以看到类型对象反映了json对象的名称将在以后显示。 我找不到表示这种模式的方法。我过去曾使用过jackson来表示这样的多态类型,但我无法通过Avro的Java API找到解决方法。
我非常感谢您对此有任何帮助/建议。 :) 非常感谢。
答案 0 :(得分:1)
您可能必须使用Avro-parlance中的内容称为"架构投影&#34 ;:也就是说,您定义了正在解析的不同架构的超集,并且Avro会根据需要忽略缺少的架构字段。它在Schema Resolution:
部分中描述http://avro.apache.org/docs/1.7.7/spec.html
至少这是理论。在实践中,我经常不得不深入研究(Java-)API代码并明确地处理空值等。