java—当存在多个子类时,如何设计restful服务请求?

50pmv0ei  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(321)

我有两个终点
http://localhost:8080/account/v1/credit/{accountnumber}(post->transactiondto)
http://localhost:8080/account/v1/debit/{accountnumber}(post->transactiondto)
我的交易是:

public class TransactionDTO {

    @NotNull
    private Double amount;

    public TransactionDTO(@NotNull Double amount) {
        super();
        this.amount = amount;
    }
... Getters Setters
}

基本上,当调用credit时,dto的数量被添加到与给定accountnumber相关联的账户余额中,到目前为止没有问题。
但是,当调用debit时,正如您在下面看到的,有多种取款交易类型(并且随着应用程序变大,可以添加更多的取款交易类型),例如billpaymenttransaction、drafttransaction。
我的问题是,我应该如何设计请求类(transactiondto),以便当涉及到控制器时,我能够理解哪种类型的撤销事务,并为其执行特定的操作。
我的控制器的方法:

@PostMapping(path = "/credit/{accountNumber}")
public ResponseEntity<TransactionStatus> credit(@PathVariable String accountNumber, @RequestBody TransactionDTO depositTransaction) throws InsufficientBalanceException {
    TransactionStatus response = accountService.credit(accountNumber, depositTransaction);
    return new ResponseEntity<>(response,HttpStatus.OK);
}

@PostMapping(path = "/debit/{accountNumber}")
public ResponseEntity<TransactionStatus> debit(@PathVariable String accountNumber, @RequestBody TransactionDTO withdrawalTransaction) throws InsufficientBalanceException {
    return new ResponseEntity<>(accountService.debit(accountNumber, withdrawalTransaction),HttpStatus.OK);
}

gmol1639

gmol16391#

如果您只想/需要为多种类型的取款使用一个端点,可以使用一个枚举来定义不同的类型,并将其作为字段添加到transactiondto中。
像这样:

public enum DebitType { BILL_PAYMENT, WITHDRAW, ... }

public class DebitTransactionDTO {

    @NotNull
    private Double amount;

    @NotNull
    private DebitType debitType;

    public DebitTransactionDTO(@NotNull Double amount, @NotNull DebitType debitType) {
        super();
        this.amount = amount;
        this.debitType = debitType;
    }
    ... Getters Setters
}

由于您可能不希望在贷方事务中使用debit类型,因此您可能希望为credit和debit使用单独的dto类(因此使用debittransactiondto类名)。

相关问题