首页 > 解决方案 > 具有相同路径但具有不同 @RequestParam 值的多个端点

问题描述

我有一个 API 路径GET /users/copy/users/type我可以使用以下构造来拥有两个具有相同路径但具有不同 RequestParams 集的 API :

@GetMapping(value = "/users/copy", params = {"type"})
public ResponseEntity<UserDto> copyUserWithType(@RequestParam UserTypeEnum type) {
    ...
}

@GetMapping(value = "/users/copy", params = {"origin"})
public ResponseEntity<UserDto> copyUserWithOrigin(@RequestParam UserOriginEnum origin) {
    ...
}

但是如果我需要为不同的用户类型(如 fortype = OLDtype = NEW)提供不同的 API,有没有办法让GET /users/copy他们仍然拥有相同的路径?

也许是这样的:

@GetMapping(value = "/users/copy", params = {"type=OLD"})
public ResponseEntity<UserDto> copyUserWithTypeOld(@RequestParam UserTypeEnum type) {
    ...
}  

@GetMapping(value = "/users/copy", params = {"type=NEW"})
public ResponseEntity<UserDto> copyUserWithTypeNew(@RequestParam UserTypeEnum type) {
    ...
}

标签: javaspring-bootapiresthttp-request-parameters

解决方案


实际上,答案就在问题中。

为了使不同的 API 端点具有相同的路径和相同的 @ReuqestParam 集,但具有不同的 @ReuqestParam 值,您需要指定params属性,如下所示:

@GetMapping(value = "/users/copy", params = {"type=OLD"})
public ResponseEntity<UserDto> copyUserWithTypeOld(@RequestParam UserTypeEnum type) {
    ...
}  

@GetMapping(value = "/users/copy", params = {"type=NEW"})
public ResponseEntity<UserDto> copyUserWithTypeNew(@RequestParam UserTypeEnum type) {
    ...
}

推荐阅读