Converter um protobuf para JSON usando Jackson?

Amad pessoa:

Eu recebo o seguinte erro ao converter um protobuf para JSON usando ObjectMapper de Jackson:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
Direct self-reference leading to cycle (through reference chain:
MyObjectPb$MyObject["unknownFields"]->
com.google.protobuf.UnknownFieldSet["defaultInstanceForType"])

MyObjectPb tem o seguinte campo:

protected com.google.protobuf.UnknownFieldSet unknownFields

Como eu estou trabalhando em uma base de código existente, eu tenho as seguintes restrições:

  1. Não posso modificar o código-fonte para MyObjectPb, então não posso usar de Jackson ignorar anotações em MyObjectPb.
  2. Nem posso usar bibliotecas de Gson para converter o objeto, como a base de código já usa Jackson para serialização. Adicionando uma nova dependência não é recomendado.

Como eu digo Jackson ignorar (de) serialização do objeto UnknownFieldSet dentro MyObjectPb?


Eu tentei o seguinte, mas essas abordagens não parecem resolver o problema:

a) Configuração da ObjectMapper:

myObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

b) Utilizando um Jackson Mixin:

@JsonIgnoreType
private abstract class UnknownFieldSetIgnoreMixIn {}

myObjectMapper.addMixIn(UnknownFieldSet.class, UnknownFieldSetIgnoreMixIn.class)
Amad pessoa:

Eu usei a classe JsonFormat (com.googlecode.protobuf.format.JsonFormat) para converter o protobuf:

new JsonFormat().printToString(myObject)

Este fez o trabalho perfeitamente para mim.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=172252&siteId=1
Recomendado
Clasificación