ジャクソンを使用してJSONにいるProtobufを変換しますか?

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

私は、既存のコードベースに取り組んでいますように、私は以下の制約があります。

  1. 私はMyObjectPbにジャクソンの無視、アノテーションを使用することはできませんので、私は、MyObjectPbのソースコードを変更することはできません。
  2. どちらも私は、コードベースがすでに直列化のためにジャクソンを使用して、オブジェクトを変換するために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)

これは私のために完璧に仕事をしてくれました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=172254&siteId=1