6. Переименовать JSON-поле с сохранением обратной совместимости
Условие задачи:
Необходимо изменить название поля в JSON с title на name, сохранив обратную совместимость.
Старые клиенты должны продолжать отправлять:
{
"title": "..."
}
Новые клиенты должны использовать:
{
"name": "..."
}
При сериализации ответа необходимо использовать новое название name.
Спойлеры к решению
Подсказки
💡 Новое основное имя поля можно задать через
💡 Старое имя можно оставить для десериализации через
💡
@JsonProperty.💡 Старое имя можно оставить для десериализации через
@JsonAlias.💡
@JsonAlias влияет на чтение JSON, но не меняет имя поля при сериализации.Решение
public class BookDto {
@JsonProperty("name")
@JsonAlias("title")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Теперь оба входных варианта будут корректно десериализованы:
{
"name": "Clean Code"
}
и:
{
"title": "Clean Code"
}
В обоих случаях значение попадёт в поле:
private String name;
При сериализации объекта наружу Jackson будет использовать новое имя:
{
"name": "Clean Code"
}
Таким образом, @JsonProperty("name") задаёт актуальное имя поля, а @JsonAlias("title") позволяет временно поддерживать старый контракт API.