amad人:
ジャクソンのObjectMapperを使用してJSONにいるProtobufを変換しながら、私は次のエラーを取得します:
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のソースコードを変更することはできません。
- どちらも私は、コードベースがすでに直列化のためにジャクソンを使用して、オブジェクトを変換するためにGsonのライブラリを使用することはできません。新しい依存関係を追加することは推奨されません。
どのように私はMyObjectPb内UnknownFieldSetオブジェクトを直列化(デ)無視するジャクソンを教えていますか?
私は以下のことを試してみましたが、これらのアプローチは、問題を解決していないようです。
A)ObjectMapperを設定します:
myObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
b)のジャクソンミックスインを使用します:
@JsonIgnoreType
private abstract class UnknownFieldSetIgnoreMixIn {}
myObjectMapper.addMixIn(UnknownFieldSet.class, UnknownFieldSetIgnoreMixIn.class)
amad人:
私がいるProtobufを変換するJsonFormatクラス(com.googlecode.protobuf.format.JsonFormat)を使用しました。
new JsonFormat().printToString(myObject)
これは私のために完璧に仕事をしてくれました。