当前位置: 首页 > 知识库问答 >
问题:

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

竺捷
2023-03-14

我有两个终点

  • http://localhost:8080/account/v1/credit/{帐号}(POST-

以及我的交易:

public class TransactionDTO {

    @NotNull
    private Double amount;

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

基本上,当调用信贷时,dto的金额将添加到与给定帐号相关的帐户余额中,到目前为止没有问题。

然而,当调用借记卡时,正如您在下面看到的,有多种取款交易类型(并且随着应用程序变大,可以添加更多的取款交易类型),例如BillPaymentTransaction、取款交易。

我的问题是,我应该如何设计请求类(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);
}

共有1个答案

巫马俊力
2023-03-14

如果您想/需要为多种类型的取款只使用一个endpoint,可以使用一个枚举来定义不同的类型,并将其作为字段添加到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
}

由于您可能不希望在信贷交易中使用借记类型,因此您可能希望为信贷和借记使用单独的DTO类(因此使用DebitTransactionDTO类名)。

 类似资料:
  • 我有一个游戏玩家类,有不同的玩家类型:动物,人,机器人。我希望我的游戏有一个使用单例模式的玩家实例,但不确定这是否可行?

  • 问题内容: 在我的Web服务器应用程序中,我有一个方法,该方法可以修改xml文档并看起来类似于: 使用的zip归档文件包含需要修改的xml文件和其他一些文件。如何区分使用的xml文件和方法内部的归档以及应该使用哪种方法参数来表示此使用的资源? 问题答案: 一种解决方案是只读取。您可以将包裹在中。有了,您可以得到with ,然后可以得到与文件名。然后只要检查名称即可。 不过,您需要消耗。这是一个简单

  • 我在这里阅读了以下内容: Swagger 目前没有从客户端或服务器的角度包含支持多个 API 版本的建议 — 声明了版本控制信息(规范和底层 API 实现)。 我想知道的是如何配置swagger UI以显示多个服务的API,即驻留在不同服务器上的服务。我尝试在不同的服务器上配置swagger UI,但出现以下错误: 无法从服务器读取。它可能没有适当的访问控制源设置。 我读过关于在服务器上启用COR

  • 问题内容: 因此,我有一个VehicleDto: 我需要在请求有效负载中包含CarDto或BikeDto。 在请求后的有效负载中,将存在多个字段,这些字段是VehicleDto的属性,例如,此处为someId。现在,此someId也是CarDto和BikeDto的一部分,并且是VehicleDto的子代的任何其他Dto。 因此,当我尝试保存到数据库中时,那里出现了一些问题。 特级车: 童车: 我应

  • 我有以下情况 我有一个REST客户端,它充当其他3个REST客户端的门面。(我正在用Java编程,使用Spring Boot) 客户机的职责之一包括对用户执行CRUD操作 现在,所有其他3个公开自己REST API的系统都有某种用户管理功能。 例如,当我收到创建用户的请求时,我必须通过REST API在这3个系统上创建它们,并将它们保存在我的数据库中。 现在,在最好的情况下,我只是调用他们的API

  • 我们是一个电子商务网站,希望创建API给我们的客户提供一个接口,通过这个API发送产品相关信息。我们目前需要3种类型的产品信息: 基本细节:如价格、颜色等 映像:产品映像 评论:该产品的评论 方法1:允许客户端通过单个API发送所有信息。 方法2:为所有子资源创建不同的API。 方法3:使用层次URI为所有子资源创建不同的API。