所谓 Restful API, 简单的说就是利用已有的四个 HTTP 动作实现对资源的四种操作:
- GET 获取
- POST 创建
- PUT 更新
- DELETE 删除
如果你拥有一个独立的客户端, 发送这四种动作是不成问题的, 可是如果你是做 RIA 开发(Flex 或 Silverlight), 目前的浏览器宿主只能支持 GET 和 POST. 后两种动作怎么办?
- 采用的方法是读取 POST 表单里的 hidden 域 _method
GET请求 后端: @ResponseBody @GetMapping("/user/{id}") public User selectUserById(@PathVariable("id") Integer id){ return userService.getUserById(id); } 前端: localhost:8083/user/1 POST请求 后端: @ResponseBody @PostMapping("/user") public User insert(User user){ System.out.println("Get请求..."); userService.insert(user); return user; } 前端: <form action="http://localhost:8083/user" method="post"> <input type="text" name="id" value="1"/> <input type="text" name="name" value="one"/> <input type="submit" value="提交"/> </form> PUT请求 后端: @ResponseBody @PutMapping("/user") public User update(User user){ System.out.println("Put请求..."); System.out.println(user); return userService.update(user); } 前端: <form action="http://localhost:8083/user" method="post"> <input type="text" name="id" value="1"/> <input type="text" name="name" value="one"/> <input type="text" name="_method" value="PUT"/> <input type="submit" value="提交"/> </form> DELETE请求 后端: @DeleteMapping("/user/{id}") @ResponseBody public String delete(@PathVariable("id") Integer id){ System.out.println("Delete请求..."); userService.delete(id); return "从缓存中删除编号为"+id+"的对象,下一次将从数据库中查询该对象"; } 前端: <form action="http://localhost:8083/user/1" method="post"> <input type="text "name="_method" value="DELETE"/> <input type="submit" value="提交"/> </form
$.ajax({ headers: { 'X-HTTP-Method-Override': 'DELETE' }, method: 'GET' // more parameters... });