有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  • /用户:获取(返回所有用户)
  • /users/:id:GET(返回具有给定id的用户,默认id=1)
  • /用户: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) 个答案

  1. # 1 楼答案

    您当前的映射:

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