首页 > 解决方案 > 有没有办法为具有不同 RequestBody 的不同方法提供相同的映射?(补丁请求)

问题描述

我有以下两种 API 方法:

  @PatchMapping("/{id}")
  @PreAuthorize("hasRole('ROLE_ADMIN')")
  public ResponseEntity<Project> updateProjectInactivity(@PathVariable long id, @RequestBody InactivityDTO inactivityDTO) 
  throws ProjectNotFoundException {
    return projectService.updateProjectInactivity(id, inactivityDTO);
  }

  @PatchMapping("/{id}")
  @PreAuthorize("hasRole('ROLE_ADMIN')")
  public ResponseEntity<Project> updateProjectStatus(@PathVariable long id, @RequestBody StatusDTO statusDTO) 
  throws ProjectNotFoundException {
    return projectService.updateProjectStatus(id, statusDTO);
  }

这两种方法有不同的@RequestBody,但我目前得到一个错误,因为它们都有相同的映射。

有没有办法为具有不同 RequestBody 的不同方法提供相同的映射?如果没有,实现我想要的最佳解决方案是什么?我可以考虑给他们一个不同的@RequestParameter,但这会很难看,因为我不需要那个参数。它只会用于实现不同的映射。

标签: javaspring

解决方案


这是因为@PatchMapping("/{id}")在这两种方法中。

您可以拥有具有不同请求映射的相同 url。像下面

  • @DeleteMapping("/{id}")
  • @PatchMapping("/{id}")

您应该开始使用不同的请求路径,因为这两种方法都负责不同的操作或更改不同的子域。(根据休息约定)

用于编辑状态

  • @PostMapping({"{id}/status"}) - 表示您正在编辑对象的状态。

同样,您应该对不活动使用不同的请求路径


推荐阅读