27. [Изменение названия атрибута в API] #
Условие задачи:
Организовать переход на изменение названия принимающего атрибута с title на name. Нужно обеспечить обратную совместимость, чтобы клиенты, использующие старый формат ("title": "..."
), могли продолжать работать, а новые — использовать "name": "..."
.
Исходный JSON:
{
"title": "..."
}
Новый JSON:
{
"name": "..."
}
Спойлеры к решению
Подсказки
💡 Основное имя атрибута задается с помощью @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;
}
}
Объяснение решения:
@JsonProperty(“name”)
Эта аннотация указывает, что основное имя атрибута при сериализации и десериализации — name. 📘@JsonAlias(“title”)
Позволяет принимать входящие JSON с полем title. Это обеспечивает обратную совместимость, и клиенты, использующие старое название, смогут продолжать отправлять данные в прежнем формате. 🔄
Таким образом, используя комбинацию этих аннотаций, мы можем легко перевести API на новое имя атрибута, не ломая работу с уже существующими клиентами. 🚀