【发布时间】:2025-12-13 15:05:01
【问题描述】:
我有一个 API 路径 GET /users/copy。我可以有两个 API 具有相同的 /users/type 路径,但使用以下构造具有不同的 RequestParams 集:
@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) {
...
}
但是如果我需要为不同的用户类型提供不同的 API(例如 type = OLD 和 type = NEW),有没有办法让他们仍然拥有相同的 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) {
...
}
【问题讨论】:
-
我不知道你为什么要这样做,但这不是一个好的模式。您可以在方法内部执行 if else 。还是想用,可以
/users/copy/type/old/users/copy/type/new。 -
是的,我知道我的问题很奇怪。但是添加后缀不是我的选择
-
如果你想要固定的参数,那么你使用后缀更好。或者使用 if-else inside 方法。
-
我不能添加后缀,我非常想避免额外的 if-else 结构。否则我不会有这个问题
-
你尝试过这个吗?
标签: java spring-boot api rest http-request-parameters