我使用Jackson的ObjectMapper将protobuf转换为JSON时,遇到了以下错误:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Direct self-reference leading to cycle (through reference chain:
MyObjectPb$MyObject["unknownFields"]->
com.google.protobuf.UnknownFieldSet["defaultInstanceForType"])
MyObjectPb有以下字段:
protected com.google.protobuf.UnknownFieldSet unknownFields
作为我正在处理现有的代码库,我有以下限制:
- 我不能修改MyObjectPb的源代码,因此无法在MyObjectPb中使用Jackson的忽略注释。
- 也不能使用Gson的库来转换对象,因为代码库已经使用Jackson进行序列化。不建议添加新的依赖项。
我尝试了以下方法,但这些方法似乎无法解决问题:
a) 配置ObjectMapper:
myObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
使用Jackson Mixin: b) 使用Jackson Mixin:
@JsonIgnoreType
private abstract class UnknownFieldSetIgnoreMixIn {}
myObjectMapper.addMixIn(UnknownFieldSet.class, UnknownFieldSetIgnoreMixIn.class)