【问题标题】:Defining Empty String in Avro Schema在 Avro Schema 中定义空字符串
【发布时间】:2020-07-27 08:17:21
【问题描述】:

我目前在使用 Avro JsonDecoder 时遇到问题。 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。 对我来说,仅使用 "" 作为默认值,我这边的默认值处理可能不正确。仅当该字段根本不可用时才会发生错误,但据我了解,这是应该使用默认值的情况。如果我将 json 中的值设置为"CodeNumber": "",则解码器没有任何问题。 有什么提示或想法吗?

【问题讨论】:

    标签: java json apache-kafka avro string-decoding


    【解决方案1】:

    找到这个:

    事实证明,Java 实现只是忽略了默认值。我添加了一个解决方法,它将捕获异常,然后查找默认值。将在 1.9.0 版中发布

    来源:https://github.com/sksamuel/avro4s/issues/106

    如果可能,请尝试将您的 Avro 解码器升级到 1.9.0 版本。

    【讨论】:

    • 我正在使用org.apache.avro 库。您的发现看起来不错,但是关于错误的库。尽管如此,我尝试升级到 1.9.2,但问题仍然存在。
    【解决方案2】:

    我建议使用null,因为它在逻辑上更好:

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

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 2019-02-19
      • 2017-01-21
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      相关资源
      最近更新 更多