小编ama*_*son的帖子

使用Jackson将Protobuf转换为JSON?

使用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"])
Run Code Online (Sandbox Code Playgroud)

MyObjectPb具有以下字段:

protected com.google.protobuf.UnknownFieldSet unknownFields
Run Code Online (Sandbox Code Playgroud)

当我在现有代码库上工作时,我有以下限制:

  1. 我无法修改MyObjectPb的源代码,因此无法在MyObjectPb中使用Jackson的ignore注释。
  2. 我也不能使用Gson的库来转换对象,因为代码库已经使用Jackson进行序列化了。不建议添加新的依赖项。

如何告诉Jackson忽略(反序列化)MyObjectPb中的UnknownFieldSet对象?


我尝试了以下方法,但是这些方法似乎无法解决问题:

a)配置ObjectMapper:

myObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
Run Code Online (Sandbox Code Playgroud)

b)使用杰克逊混音:

@JsonIgnoreType
private abstract class UnknownFieldSetIgnoreMixIn {}

myObjectMapper.addMixIn(UnknownFieldSet.class, UnknownFieldSetIgnoreMixIn.class)
Run Code Online (Sandbox Code Playgroud)

java json protocol-buffers jackson

6
推荐指数
2
解决办法
4821
查看次数

标签 统计

jackson ×1

java ×1

json ×1

protocol-buffers ×1