Как использовать разные свойства сопоставления объектов для разных подобъектов - PullRequest
0 голосов
/ 06 мая 2019

Рассмотрим случай, подобный приведенному ниже.Я хочу сериализовать объект ClassA st Я использую различные свойства сопоставления объектов для bObject и cObject

    class ClassA {
        ClassB bObject = new ClassB();
        ClassC cObject = new ClassC();
    }

    class ClassB {
        ClassD dObject  = new ClassD();
    }

    class ClassC {
        ClassD dObject = new ClassD();
    }

    class ClassD {
        int firstMember = 1;
        String second_member = "Two";
    }

    void test() throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
        objectMapper.writerWithDefaultPrettyPrinter();
        System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(new ClassA()));
    }

например, я хочу использовать PropertyNamingStrategy.UPPER_CAMEL_CASE для bObject и PropertyNamingStrategy.SNAKE_CASE для cObject

Сериализованный json должен выглядеть следующим образом:

{
  "bObject" : {
    "dObject" : {
      "firstMember" : 1,
      "secondMember" : "Two"
       .... similarly camel case for any nested ....
    }
  },
  "cObject" : {
    "d_object" : {
      "first_member" : 1,
      "second_member" : "Two"
       .... similarly snake case for any nested ....
    }
  }
}

Я пытался добавить @JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class) & @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) к ClassB и ClassC соответственно.Это исправляет имя для dObject, но не для полей в нем.

Есть предложения?Если бы я мог использовать Mix-In или пользовательский сериализатор и десериализатор?

Контекст о том, почему мне нужно это сделать: Мой текущий POJO - classA, который использует classB и используется на границах наших сервисов и сериализуется с определенной конфигурацией.Теперь мы добавляем ClassC (не принадлежит нам) к POJO.Сериализаторы / Derserialzer для classC должны следовать другому соглашению.

...