Avro Reflect嵌套Map属性为null时序列化失败问题求助
解决Avro Reflect处理Nullable嵌套Map空值时的序列化/反序列化错误
问题根源
你当前的@AvroSchema注解仅将字段类型定义为map类型,但字段标记了@Nullable允许为null。Avro要求字段的Schema必须显式包含null作为联合类型选项,否则反射库在处理null值时,会默认认为字段必须是map实例,进而尝试调用map.size()导致空指针错误。
解决方案
修改@AvroSchema的定义,将顶层类型设置为包含null和目标map的联合类型:
class Test { @Nullable @AvroSchema("[\"null\", {\"type\":\"map\",\"values\":[\"null\", {\"type\":\"map\",\"values\":[\"null\", \"string\"]}]}]") java.util.Map<String, java.util.Map<Locale, String>> test; // 其他代码 }
说明
- Avro的联合类型需要用数组格式声明,
["null", ...]表示字段值可以是null,也可以是后续定义的类型。 - 你原来的Schema只定义了map类型,没有包含null选项,和
@Nullable的语义不匹配,这是导致错误的核心原因。 - 修改后,当
test为null时,Avro反射会正确识别并处理这个空值,不会再触发空指针异常。
内容的提问来源于stack exchange,提问作者mayerph
相关产品推荐
相关产品推荐

