在我的 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/