如何将 ID(参数)用于不同的 GetMappings

How can I use ID(arguments) to different GetMappings

当我尝试 localhost:8080/api/employees 时,我得到一个列表(JSON-格式)。我还想通过 ID 获得一名员工。当我尝试 localhost:8080/api/123abc 时,我找不到具有该 ID 的员工。我的回复是:

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Jul 28 08:50:28 CEST 2020 There was an unexpected error (type=Not Found, status=404).

我的代码在下面

@RestController
@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_VALUE)
public class TestApiController {
    @Autowired
    private EmployeePoller poller;

    @GetMapping(path = "/employees")
    public List<Employee> allEmployees() {
        return poller.getAllEmployees();
    }

    @GetMapping(path = "/{id}")
    public Employee singleEmployee(@PathVariable String id) {
        return poller.getEmployeeById(id);
    }

编辑:@PathVariable Long idpoller.getEmployeeById(id.toString()); 也不起作用。

404 - 未找到可能是:

  1. GET /api/123abc 未在您的控制器中声明为端点。
  2. 没有 ID = 123abc 的员工。

要确认您的情况,请使用方法 OPTION 向 localhost:8080/api/123abc

发出新请求

如果响应为 404,则问题出在您的控制器上。如果响应为 200,则没有 ID 为 123abc 的员工。

我还看到您对两个端点使用相同的路径。尝试以下代码(它验证“id”变量是否为员工)。

@GetMapping(path = "/{id}")
public Employee getEmployee(@PathVariable(name = "id") String id) {
    if ("employees".equals(id)) {
        return poller.getAllEmployees();
    } else {
        return poller.getEmployeeById(id);
    }
}