使用Apache Avro时UUID字段toString输出无引号问题咨询
Avro UUID字段toString输出无引号问题解答
结论
这是Avro 1.11.1及后续版本的已知bug,和你的配置无关。
问题根源
Avro 1.11.1优化了UUID逻辑类型的映射,将原本的String类型改为java.util.UUID类型,但生成的toString()方法处理UUID字段时,直接输出UUID原生的无引号字符串(例如550e8400-e29b-41d4-a716-446655440000),没有像字符串字段那样添加双引号,导致输出的内容不符合JSON格式规范。
可行解决方案
- 临时降级版本:将Avro Maven插件版本回退到1.11.0,此时UUID字段会被映射为String类型,
toString()输出会自动包含引号。 - 重写toString()方法:手动修改生成的Java类,重写
toString()逻辑,给UUID字段添加引号包裹;也可以通过插件自定义模板,让生成的代码自动处理引号。 - 使用官方JSON序列化工具:不要依赖生成类的
toString(),改用Avro提供的JSON序列化API(比如GenericDatumWriter搭配JsonEncoder)生成合法JSON,这是更稳妥的长期方案。
内容的提问来源于stack exchange,提问作者Javier Estévez
相关产品推荐
相关产品推荐

