У меня есть следующая иерархия классов
Promotion - abstract
- Coupon
- Sales
- Deals
(Купоны, Продажи и Предложения - все подклассы Поощрения).
и хотел бы определить тип объекта при обмене даннымимежду API REST (JSON) и клиентом (Angular).Пользователи могут отправить купон или сделку или продажу .Например, когда клиент отправляет купон, я хочу знать, что это купон, чтобы я мог вызвать правильный метод.
Чтобы решить эту проблему, я объявил переменную и абстрактный метод.в акции.
protected String promotionType = getPromotionType();
protected abstract String getPromotionType();
В подклассах, например, в Купон У меня есть что-то вроде этого
protected String getPromotionType() {
return "coupon"
// OR return this.getClass().getSimpleName().toLowerCase();
}
Это автоматически инициализирует promoType переменная, так что в контроллерах я могу проверить, является ли объект купон или продажи или сделки .Помните, что JSON отправляет данные в строковых форматах, поэтому я должен определить способ прихода объекта.
В этом случае у меня будет один контроллер для обработки всех моих операций CRUD.В моем методе контроллера я сделаю что-то вроде: *
@PostMapping public void create(@RequestBody Promotion){
// And inside here I will check the type of **promotionType**
}
Здесь я использую Promotion в качестве аргумента вместо любого из подклассов в методе create () .
Мой вопрос: это лучший способ решить эту проблему?
Или мне нужно создать отдельный контроллер для каждого из подклассов?Я ищу лучший способ сделать это в реальном мире.
Я использую Hibernate для своих отображений.