java在avro模式中定义空字符串

f8rj6qna  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(492)

我目前有一个与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": "" 解码器没有任何问题。有什么提示或想法吗?

ix0qys7i

ix0qys7i1#

我建议用 null 因为逻辑上更好:

{
    "name": "CodeNumber",
    "type": ["string", "null"],
    "default": null
}
hujrc8aj

hujrc8aj2#

找到这个:
事实证明,问题是java实现只是忽略了默认值。我添加了一个解决方法,它将捕获异常,然后查找默认值。将在1.9.0版中发布
资料来源:https://github.com/sksamuel/avro4s/issues/106
如果可能的话,请尝试将avro解码器升级到1.9.0版本。

相关问题