今天突然想学习一下Restful风,详细的我就不赘述了,我的理解是同一个请求路径根据请求方式不同进行不同的处理
如四种提交方式
GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。
POST(CREATE):在服务器新建一个资源,调用insert操作。
PUT(UPDATE):在服务器更新资源,调用update操作。
DELETE(DELETE):从服务器删除资源,调用delete语句
下面进行实践
前端简易代码
<a href="#" onclick="add()">添加</a> <a href="#" onclick="del()">删除</a> <a href="#" onclick="select()">查询</a> <a href="#" onclick="update()">修改</a> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript"> function add(){ var id = "111111111"; $.ajax({ type:"POST", url:"test.do", data:{id:"添加11111111111"}}); } function del(){ var id = "2222222"; $.ajax({ type:"DELETE", url:"test.do", data:{id:"删除22222222222"}, contentType : "text/html;charset=UTF-8", dataType:"json"}); } function select(){ var id = "33333"; $.ajax({ type:"GET", url:"test.do", data:{id:"查询3333333333"}}); } function update(){ var id = "111111111"; $.ajax({ type:"PUT", url:"test.do", data:{id:"修改4444444"}}); } </script>
后台简易代码
@RequestMapping(value = "/test.do", method = RequestMethod.DELETE) public void test(String id){ System.out.println("删除"); System.out.println(id); } @RequestMapping(value = "/test.do", method = RequestMethod.POST) public void test1(String id){ System.out.println("添加"); System.out.println(id); } @RequestMapping(value = "/test.do", method = RequestMethod.PUT) public void test2(String id){ System.out.println("修改"); System.out.println(id); } @RequestMapping(value = "/test.do", method = RequestMethod.GET) public void test3(String id){ System.out.println("查询"); System.out.println(id); }
前台ajax的提交方式对应于后台@RequestMapping(value = "/test.do", method = RequestMethod.方式)
控制台:
添加 添加11111111111 2018-10-26 09:28:45.325 DEBUG 8500 --- [nio-8080-exec-4] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@718e55d2 2018-10-26 09:28:45.977 DEBUG 8500 --- [nio-8080-exec-8] o.s.b.w.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@718e55d2 删除 null 2018-10-26 09:28:45.984 DEBUG 8500 --- [nio-8080-exec-8] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@718e55d2 2018-10-26 09:28:46.731 DEBUG 8500 --- [nio-8080-exec-9] o.s.b.w.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@718e55d2 查询 查询3333333333 2018-10-26 09:28:46.734 DEBUG 8500 --- [nio-8080-exec-9] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@718e55d2 2018-10-26 09:28:47.585 DEBUG 8500 --- [nio-8080-exec-5] o.s.b.w.f.OrderedRequestContextFilter : Bound request context to thread: org.springframework.web.filter.HttpPutFormContentFilter$HttpPutFormContentRequestWrapper@535448c 修改 修改4444444 2018-10-26 09:28:47.590 DEBUG 8500 --- [nio-8080-exec-5] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.springframework.web.filter.HttpPutFormContentFilter$HttpPutFormContentRequestWrapper@535448c
可见Restful已经根据不同的提交方式进入不同的方法了,后面大家就可以自行处理了,但是还有一个问题,当提交方式为DELETE时,接收的id值为null
在参数列表中加入@RequestBody注解,这里的作用是通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,也可以将其分别绑定到对应的字符串上。
@RequestMapping(value = "/lll.do", method = RequestMethod.DELETE) public void test(@RequestBody String id){ System.out.println("删除"); System.out.println(id); }
控制台:
2018-10-26 10:31:09.661 DEBUG 2720 --- [nio-8080-exec-1] o.s.b.w.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@4bafd197 删除 id=%E5%88%A0%E9%99%A422222222222 2018-10-26 10:31:09.667 DEBUG 2720 --- [nio-8080-exec-1] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4bafd197
可以看到,是可以获取到数据了,但是会出现中文乱码,这个中文乱码超级顽固,设置了很多都没用,最后在前台这样设置就可以了
function del(){ var id = "删除sssss22222222222"; $.ajax({ type:"DELETE", url:"lll.do", data:JSON.stringify(id), contentType :"application/json", dataType:"json"}); }
这样控制台的输出就变成了:
2018-10-26 13:42:59.585 DEBUG 8364 --- [nio-8080-exec-7] o.s.b.w.f.OrderedRequestContextFilter : Bound request context to thread: org.apache.catalina.connector.RequestFacade@343dbcb6
删除
"删除sssss22222222222"
2018-10-26 13:42:59.587 DEBUG 8364 --- [nio-8080-exec-7] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@343dbcb6