java 将@PathVariable的值存储在@RequestBody对象中,是一种好的做法吗?

lf5gs5x2  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(117)

我正在我的@RestController中编写POST API。
按照rest最佳实践,URL为

/v1/myapi/bank/{bank_id}/branch/{branch_id}

API还以@RequestBody BankDetails的形式将其他参数作为输入。

class BankDetails {
    String address;
    String zip;
    // Constructor, getters & setters
}

出于某种原因,我想把这个请求放入一个队列(在本例中为 * AWS SQS *),即BankDetails对象与关联的bank_idbranch_id
为了将其存储为一个对象,我修改了BankDetails类以包含bank_idbranch_id
例如:

class BankDetails {
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    String bankId;

    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    String branchId;

    String address;
    String zip;
    // Contructor, getters & setters
}

我还修改了@RestController中的@PostMapping方法来提供数据。

@PostMapping(value = "/v1/myapi/bank/{bank_id}/branch/{branch_id}", produces = "application/json")
public ResponseEntity<MyResponse> createBankBranch(
    @PathVariable(name = "bank_id") String bankId,
    @PathVariable(name = "branch_id") String branchId,
    @RequestBody BankDetails bankDetails) {

        // Added these 2 lines.
        bankDetails.setBankId(bankId);
        bankDetails.setbrnachId(branchId);
}

首先在path & feed中获取与在RequestBody对象中相同的参数,这是一个好的实践吗?
另外,我不能使用/v1/myapi/bank/{bank_id},因为它是一个单独的API。

kr98yfug

kr98yfug1#

简单的POST /myapi/bank和所有的细节作为DTO和不担心任何事情。
我认为您没有遵循AFAIK的“最佳做法”,您提供的此路径将用于在给定bank_id的上下文中修改具有给定id的分支,而不是银行本身
例如,有PUT /bank/bankId/vault/cash可以修改给定银行的现金总额(愚蠢,但我认为它作为展示罚款),而不是银行本身,但这是你试图做的。

相关问题