Task Livecoding Java Rename Attribute

27. [Изменение названия атрибута в API] #

Условие задачи:

Организовать переход на изменение названия принимающего атрибута с title на name. Нужно обеспечить обратную совместимость, чтобы клиенты, использующие старый формат ("title": "..."), могли продолжать работать, а новые — использовать "name": "...".

Исходный JSON:

{
    "title": "..."
}

Новый JSON:

{
    "name": "..."
}
Спойлеры к решению
Подсказки
💡 Используйте аннотацию @JsonAlias для поддержки старого названия атрибута.
💡 Основное имя атрибута задается с помощью @JsonProperty.
Решение
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;

public class BookDTO {
    // Новое основное имя "name", поддерживаем также "title"
    @JsonProperty("name")
    @JsonAlias("title")
    private String name;

    // Геттер
    public String getName() {
        return name;
    }

    // Сеттер
    public void setName(String name) {
        this.name = name;
    }
}

Объяснение решения:

  1. @JsonProperty(“name”)
    Эта аннотация указывает, что основное имя атрибута при сериализации и десериализации — name. 📘

  2. @JsonAlias(“title”)
    Позволяет принимать входящие JSON с полем title. Это обеспечивает обратную совместимость, и клиенты, использующие старое название, смогут продолжать отправлять данные в прежнем формате. 🔄

Таким образом, используя комбинацию этих аннотаций, мы можем легко перевести API на новое имя атрибута, не ломая работу с уже существующими клиентами. 🚀