本文介紹了使用Jackson將協(xié)議Buf轉(zhuǎn)換為JSON?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
使用Jackson的ObjectMapper將protocol buf轉(zhuǎn)換為JSON時(shí)出現(xiàn)以下錯(cuò)誤:
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
由于我正在處理現(xiàn)有的代碼庫(kù),因此有以下限制:
-
我無(wú)法修改MyObjectPb的源代碼,因此無(wú)法在MyObjectPb中使用Jackson的忽略批注。
我也不能使用gson的庫(kù)來(lái)轉(zhuǎn)換對(duì)象,因?yàn)榇a庫(kù)已經(jīng)使用Jackson進(jìn)行序列化。不建議添加新的依賴項(xiàng)。
如何告訴Jackson忽略(反)序列化MyObjectPb內(nèi)的UnnownFieldSet對(duì)象?
我嘗試了以下方法,但這些方法似乎無(wú)法解決問(wèn)題:
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)來(lái)轉(zhuǎn)換協(xié)議buf:
new JsonFormat().printToString(myObject)
這為我完成了完美的工作。
這篇關(guān)于使用Jackson將協(xié)議Buf轉(zhuǎn)換為JSON?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,