Из документации :
Смешанные аннотации - это способ связать аннотации с классами без изменения самих (целевых) классов, изначально предназначенных для поддержки поддержки 3-готипы данных для вечеринок, где пользователь не может изменять источники для добавления аннотаций.
С дополнительными модулями вы можете:
1. Определить, что аннотации '' 'смешанного класса' '' (или интерфейса)
2. будет использоваться с '' 'целевым классом' '' (или интерфейсом) таким образом, что будет выглядеть
3. как если бы у '' target class '' были все аннотации, что '' mix-in '''класс имеет (в целях настройки сериализации / десериализации)
Для решения ваших проблем вы можете:
- Создать новый
POJO
, который имеет все обязательные поля. - Реализация пользовательского сериализатора.
- Перед сериализацией преобразуйте
POJO
в Map
и добавьте / удалите узлы. - Используйте
com.fasterxml.jackson.databind.ser.BeanSerializerModifier
для расширения пользовательских сериализаторов. См .: Пользовательская сериализация и десериализация Джексона .
Например, чтобы добавить постоянную версию для каждого объекта, вы можете заключить ее в класс Verisoned
:
class Versioned {
private final String version;
@JsonUnwrapped
private final Object pojo;
public Versioned(String version, Object pojo) {
this.version = version;
this.pojo = pojo;
}
public String getVersion() {
return version;
}
public Object getPojo() {
return pojo;
}
}
Теперь, если вы оберните объект Arae(width, height)
:
Area area = new Area(11, 12);
String json = mapper.writeValueAsString(new Versioned("1.1", area));
, результат будет:
{
"version" : "1.1",
"width" : 11,
"height" : 12
}