我有paymenttransactiondto作为超类和子类,比如phonebillpaymenttransactiondto,它有一个字段作为phonenumber等等。
我想从单一支付服务处理这些DTO。我的控制器方法如下;
public ResponseEntity<TransactionStatus> payment(@PathVariable String accountNumber,
@Valid @RequestBody PaymentTransactionDTO paymentTransactionDTO)
当我将phonebillpaymenttransactiondto发布到上述方法时,我无法访问phonenumber字段,因为我在方法签名中有paymenttransactiondto。
我应该如何设计从单个方法管理多个继承的dto?
1条答案
按热度按时间slwdgvem1#
如果使用jackson,您可以通过父类上的@jsontypeinfo/@jsonsubtypes实现这一点,但是仍然需要一个cast来达到phonenumber。
为了避免任何类强制转换,您需要使用所需数量的签名(paymenttransactiondto的每个子类至少一个)和显式json结构要求来重载控制器方法
在下面,您仍然可以从“phone”相关代码调用基本事务控制器方法,或者也可以根据基本实现将控制器/服务拆分为特定代码。