我有一个Spring @RestController
来操纵我的用户,我希望有几个功能:
我开始研究它,但我不确定如何管理相同方法的“重叠”URI(例如前两种情况)。这是我到目前为止所得到的:
@RestController
public class UserController {
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getAllUsers() {
return UserDAO.getAll();
}
@RequestMapping(value = "/users", method = RequestMethod.GET)
public User getUser(@RequestParam(value = "id", defaultValue = "1") int id) {
return UserDAO.getById(id);
}
}
由于“模糊映射”这不起作用,我很清楚,但我不知道该怎么做。我应该更改其中一个URI还是有其他方式?
编辑: 我也尝试将第二种方法更改为:
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
public User getUser(@PathVariable("id") int id) {
return UserDAO.getById(id);
}
仍然无效。
答案 0 :(得分:3)
您当前的映射:
@RequestMapping(value = "/users", method = RequestMethod.GET)
public User getUser(@RequestParam(defaultValue = "1") int id)
将映射到/users?id=42
而不是所需的/users/42
。如果要为/users/:id
端点创建映射,请使用以下命令:
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
public User getUser(@PathVariable int id) {
return UserDAO.getById(id);
}
此外,从Spring Framework 4.3开始,您可以使用new meta annotations来处理GET
,POST
等方法:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public List<User> getAllUsers() {
return UserDAO.getAll();
}
@GetMapping("{id}")
public User getUser(@PathVariable int id) {
return UserDAO.getById(id);
}
}