1

Consider a case like below. I want to serialize ClassA object s.t. I use different object mapper properties for bObject and 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()));
    }

e.g. I want to use PropertyNamingStrategy.UPPER_CAMEL_CASE for bObject and PropertyNamingStrategy.SNAKE_CASE for cObject

The serialized json should look like :

{
  "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 ....
    }
  }
}

I've tried adding @JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class) & @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) to ClassB and ClassC respectively . That fixes the name for dObject but not for the fields within it.

Any suggestions ? If I could use Mix-ins or custom serializer & deserializer ?

Context on why I need to do so : My current POJO is classA which uses classB and used at our service boundaries and is being serialized with a certain config. We're now adding ClassC (not owned by us) to POJO. Serializers/Derserialzer for classC need to follow a different convention.

Archit Jain
  • 2,154
  • 1
  • 18
  • 32

0 Answers0