【发布时间】:2018-05-26 07:51:38
【问题描述】:
我有以下类层次结构
Promotion - abstract
- Coupon
- Sales
- Deals
(Coupons、Sales 和 Deals 都是 Promotion 的子类)。
并且希望在 REST API (JSON) 和客户端 (Angular) 之间交换数据时确定对象的类型。用户可以提交Coupon或Deal或Sale。例如,当客户发送优惠券时,我希望能够知道这是优惠券,以便我可以调用正确的方法。
为了解决这个问题,我在 Promotion 中声明了一个变量和一个抽象方法。
protected String promotionType = getPromotionType();
protected abstract String getPromotionType();
在子类中,例如 Coupon 我有类似的东西
protected String getPromotionType() {
return "coupon"
// OR return this.getClass().getSimpleName().toLowerCase();
}
这将自动初始化 promotionType 变量,以便在控制器中检查对象是 Coupon 或 Sales 还是 交易。请记住,JSON 以字符串格式发送数据,所以我必须有办法确定即将到来的对象类型。
在这种情况下,我将有一个控制器来处理我的所有 CRUD 操作。在我的控制器方法中,我将执行以下操作::
@PostMapping public void create(@RequestBody Promotion){
// And inside here I will check the type of **promotionType**
}
这里使用 Promotion 作为参数,而不是 create() 方法中的任何子类。
我的问题是,这是解决这个问题的最佳方法吗?
或者我必须为每个子类创建一个单独的控制器吗?我正在寻找在现实世界中做到这一点的最佳方式。
我正在使用 Hibernate 进行映射。
【问题讨论】:
标签: java spring rest spring-mvc