我的控制器中有以下2个GET映射:
1. @GetMapping("/department/{deptId}/employee/{employeeId}")
public String func1(@PathVariable(value = "deptId", required = true) String deptId,
@PathVariable(value = "employeeId", required = true) String employeeId) { ... }
2. @GetMapping("/department/{deptId}/employee/{employeeId}/workLogs")
public String func2(@PathVariable(value = "deptId", required = true) String deptId,
@PathVariable(value = "employeeId", required = true) String employeeId) { ... }
当我触发API作为:
GET http://localhost:8080/department/102/employee//workLogs
->保持employeeId
为空,此调用被映射到第一个GetMapping(func1(,并且employeeId
被计算为employeeId = "workLogs"
。
因此,没有为丢失的路径变量抛出异常,该变量被标记为必需,并以200 OK完成调用
如何解决此问题,使其正确映射到func2,并为缺少所需的路径变量抛出异常。
当您提出请求时http://localhost:8080/department/102/employee/workLogs
这将被解释为workLogs
被提供为employeeId。
有几种方法可以解决这个问题。
- 在
func1
中,如果employeeId.equals("workLogs")
,则抛出异常 - 将employeeId设置为Int或Long,以便在尝试将
workLogs
解析为employeeId
时,默认情况下会引发异常
但实际上,用双斜杠(//
(调用http://localhost:8080/department/102/employee//workLogs
应该会导致404错误。如果不是这样,请尝试使用Spring的5.3.15版本。