我目前有一个与avrojsondecoder的问题。avro在版本1.8.2中使用。.avsc文件的定义如下:
{
"type": "record",
"namespace": "my.namespace",
"name": "recordName",
"fields": [
{
"name": "Code",
"type": "string"
},
{
"name": "CodeNumber",
"type": "string",
"default": ""
}
]
}
当我现在运行我的测试用例时,我得到一个 org.apache.avro.AvroTypeException: Expected string. Got END_OBJECT
. 引发错误的类是jasondecoder。对我来说,我这边的defaut值处理可能不适合使用just ""
作为默认值。只有在字段完全不可用时才会发生错误,但在我的理解中,这是应该使用默认值的情况。如果我将json中的值设置为 "CodeNumber": ""
解码器没有任何问题。有什么提示或想法吗?
2条答案
按热度按时间ix0qys7i1#
我建议用
null
因为逻辑上更好:hujrc8aj2#
找到这个:
事实证明,问题是java实现只是忽略了默认值。我添加了一个解决方法,它将捕获异常,然后查找默认值。将在1.9.0版中发布
资料来源:https://github.com/sksamuel/avro4s/issues/106
如果可能的话,请尝试将avro解码器升级到1.9.0版本。