Рассмотрим случай, подобный приведенному ниже.Я хочу сериализовать объект 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
должны следовать другому соглашению.