本文介紹了使用Jackson將協議Buf轉換為JSON?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
使用Jackson的ObjectMapper將protocol buf轉換為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進行序列化。不建議添加新的依賴項。
如何告訴Jackson忽略(反)序列化MyObjectPb內的UnnownFieldSet對象?
我嘗試了以下方法,但這些方法似乎無法解決問題:
a)配置ObjectMapper:
myObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
b)使用Jackson Mixin:
@JsonIgnoreType
private abstract class UnknownFieldSetIgnoreMixIn {}
myObjectMapper.addMixIn(UnknownFieldSet.class, UnknownFieldSetIgnoreMixIn.class)
推薦答案
我使用了JsonFormat類(com.googlecode.protocol buf.format.JsonFormat)來轉換協議buf:
new JsonFormat().printToString(myObject)
這為我完成了完美的工作。
這篇關于使用Jackson將協議Buf轉換為JSON?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,