Свойство десериализации POJO типа интерфейса без класса импелентации с Джексоном - PullRequest
0 голосов
/ 29 декабря 2018

У меня проблема с десериализацией json в класс POJO, который выглядит следующим образом:

@Data
public class Foo {
   private String fieldA;
   private String fieldB;
   private IBar fieldC; 
}

IBar - это интерфейс, который определяет геттеры для некоторых классов.Одно из найденных решений - использовать @JsonDeserialize(as = BarImpl.class), где BarImpl будет реализовывать интерфейс IBar.Проблема в том, что классы, которые реализуют этот интерфейс (например, BarImpl), находятся в другом модуле maven, где у меня нет доступа из текущего модуля, поэтому я не могу использовать один из этих классов impl в этой аннотации.Можете ли вы сказать мне, если есть другое решение?

Спасибо за совет.

1 Ответ

0 голосов
/ 29 декабря 2018

Вы уверены, что имеете в виду десериализацию?Вам понадобится конкретная реализация вашего интерфейса, если Джексон сможет создавать для вас объекты Java.

  • deserialization = Json String -> объект Java
  • serialization = объект Java-> Json String

При сериализации Джексон будет использовать класс времени выполнения объекта, поэтому он будет использовать реальные реализации, а не пытаться использовать интерфейс.Если вы хотите настроить это, вы можете добавить сериализатор для вашего интерфейса.Вам нужно будет решить, что именно вы хотите написать.

        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(IBar.class, new JsonSerializer<IBar>() {

            @Override
            public void serialize(IBar value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
                gen.writeStartObject();
                gen.writeStringField("fieldName", value.getFieldName());
                gen.writeEndObject();
            }


        });
        objectMapper.registerModule(module);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...