java - 生成的 Avro Builder 设置 null 不会被默认覆盖

标签 java avro

在我的 avro 架构中,我定义了一个这样的字段

{
  "name": "myfield",
  "type": "string",
  "default": ""
}

当我在 java 中构建 avro 对象时,我设置 myfield成为null (我的代码只是将值从一个地方复制到另一个地方)

MyObject myObject = MyObject.newBuilder().setMyfield(null).build();

我最终得到

myObject.getMyfield() == null

这是预期的行为吗?难道我做错了什么?我预计我们最终会得到默认值 "" .

因为null当我尝试序列化对象(用于发送到 kafka)时,该字段不是有效值

Builder 上调用 setter 之前,我是否需要对该字段进行空检查?

最佳答案

我通过允许 null 解决了这个问题。无论如何,也许默认为 null (无意义)比 "" (有一定意义)更好。

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

关于java - 生成的 Avro Builder 设置 null 不会被默认覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509279/

相关文章:

java - 带有命名查询的 JPA Criteria API

java - 我想创建一个 Spring Batch 项目,其中 Batch 不使用我的数据源

hive - 如何在配置单元 0.13+ 中为 Parquet 数据指定模式

apache-kafka - 当 Schema Registry 与 Kafka 和 Avro 一起使用时,每个主题有一个或多个模式......?

java - 使用 Avro 进行嵌套的特定类型反序列化

java - 使用不同 Avro 类型向 Kafka 发送消息的性能 – SpecificRecordBase 与带有 Schema Registry 的 GenericRecord

java - 如何在 Spring 中实现异步非并发调度程序?

java - 核心 Java 中的字符串

java - jackson 在第一次关闭大括号后停止读取输入字符串

java - 如何反序列化avro文件