Сериализация и десериализация объекта сплющенного - PullRequest
0 голосов
/ 05 января 2019

У меня есть 2 класса:

public class SomeClass {
  private AnotherClass anotherClass;
  private String astring;
}

public class AnotherClass {

   private Date field1;
   private String field2;
}

Мне нужно сериализовать и десериализовать объекты SomeClass и хотелось бы, чтобы json выглядел как

someClass {
  field1: field1Value;
  field2: field2Value;
  astring: astringvalue;
}

т.е. сгладить поля в AnotherClass.

Я знаю, что могу использовать аннотацию @JsonUnwrapped следующим образом

  public class SomeClass {
      @JsonUnwrapped
      private AnotherClass anotherClass;
      private String astring;
    }

для этого, но поскольку во многих классах присутствует anotherClass, я бы предпочел не добавлять эту аннотацию к каждому из этих классов.

Есть ли способ добиться такого выравнивания с помощью клиентского сериализатора и десериализатора, примененного к AnotherClass?

1 Ответ

0 голосов
/ 05 января 2019

Вы можете использовать миксин, чтобы применить аннотацию @JsonUnwrapped ко всем классам

public abstract class FlattenMixin {

    @JsonUnwrapped
    private AnotherClass anotherClass;

}

Затем используйте mixinResolver для применения ко всем классам.

    objectMapper.setMixInResolver(new MixInResolver() {

        @Override
        public Class<?> findMixInClassFor(Class<?> cls) {
            // maybe filter to specific package ?
            return FlattenMixin.class;
        }

        @Override
        public MixInResolver copy() {
            return null;
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...