Spring REST控制器具有不同的功能

时间:2016-11-29 08:20:12

标签: java spring rest spring-mvc

我有一个Spring @RestController来操纵我的用户,我希望有几个功能:

  • / users:GET(返回所有用户)
  • / users /:id:GET(返回具有给定ID的用户,默认id = 1)
  • / users:POST(插入用户)
  • / users /:id:DELETE(删除具有给定ID的用户)

我开始研究它,但我不确定如何管理相同方法的“重叠”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);
}

仍然无效。

1 个答案:

答案 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来处理GETPOST等方法:

@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);
    }
}