Я построил на решении @Alex, представленном выше, и придумал неинвазивное решение, которое отменяет класс JSON, не изменяя его с помощью MixIns Джексона.
Мне пришлось сделайте это, потому что я использую схему JSON для создания POJO, поэтому я не могу вносить в них какие-либо изменения.
Предположим, у нас есть исходный класс со свойством с именем originalProperty
, которое мы хотим сопоставить иметь имя mixedProperty
class Source {
@JsonProperty("originalProperty")
int originalProperty;
@JsonProperty("anotherProperty")
int anotherProperty;
}
Для этого мы создаем класс MixIn
, который обычно является классом, содержащим только свойства, которые мы хотим переопределить
class MixIn {
@JsonProperty("mixedProperty")
@JsonAlias("originalProperty")
int originalProperty;
}
Примечание здесь мы изменили аннотацию @JsonProperty
для ссылки на новое имя свойства mixedProperty
и добавили новую аннотацию @JsonAlias
с исходным именем свойства originalProperty
Все готово, теперь, когда вам нужно чтобы смешать все вместе
class JsonCooker {
public static void main(String[] args) throws Exception {
String originalJson = "{\"originalProperty\": 1, \"anotherProperty\" :2 }";
ObjectMapper objectMapper = new ObjectMapper();
Source updatedSource = objectMapper
.addMixIn(Source.class, MixIn.class)
.readValue(originalJson, Source.class);
String updatedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(updatedSource);
System.out.println(updatedJson);
}
}
И результат будет
{
"mixedProperty" : 1,
"anotherProperty" : 2
}