• Restful


    • Restful架构:即Representational State Transfer的缩写,词组的翻译是"表现层状态转化"
      • "资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
      • 使用WEB标准来做一些准则和约束。符合REST原则,就称它为RESTful架构。
      • 基本概念:
        • 在Rest中,一切的内容都被认为是一种资源。每个资源都由特定的URI唯一标识。
        • 户端通过四个HTTP动词(POST/GET/PUT/DELETE),对服务器端资源进行操作,实现"表现层状态转化"。
        • 无状态(每次请求不相关)。
    • POST请求:
      • 前端Ajax:
      • <script>
                        
                layui.use(['form', 'layer','jquery'],
                    function() {
                        $ = layui.jquery;
                        var form = layui.form,
                        layer = layui.layer;
        
                        //监听提交
                        form.on('submit(add)',
                        function(data) {
                            $.ajax({
                                type: 'POST',
                                dataType: 'json',
                                url: '/rest/user',
                                contentType: "application/json",
                                data : JSON.stringify(data.field),
                                success: function (msg) {
                                    if(msg.users.length>0){
                                        parent.layer.msg('添加成功!', { icon: 1, time: 1000 }, function () {
                                            parent.$('.btn-refresh').click();
                                            parent.location.reload(); //刷新父页面
                                            var index = parent.layer.getFrameIndex(window.name);
                                            parent.layer.close(index);
                                        });
                                    }else{
                                         layer.msg("Error:" + msg, { icon: 5, time: 1000 });
                                    }
                                },
                                error:function (msg) {
                                    layer.msg('error!', { icon: 1, time: 1000 });
                                }
                            });
                            return false;
                        });
        
                    });
                </script>
        View Code
      • 后端Controller:
      • @PostMapping("/user")
            @ApiOperation(value="创建用户", notes="根据User对象创建用户")
            @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
            public ResponseUserVo insertUser(@RequestBody User user)  {
                log.warn(user.toString());
                userDao.addUser(user);
                List<User> users=userDao.selectAll();
                return new ResponseUserVo(users.size(),1, PageUtil.getPageByList(users,1,2));
            }
        View Code
    • GET请求:
      • 前端Ajax:
      • function getUserInfo(curr){
                 $.ajax({
                    type: 'GET',
                    dataType: 'json',
                    url: '/rest/user',
                    data: {
                        curr: curr || 1,
                        limit: 4
                    },
                    contentType : 'application/x-www-form-urlencoded',
                    success: function (msg) {
                      vm.sites = msg.users;
                      //layui分页
                      layui.use('laypage',function(){
                          var laypage=layui.laypage;
                          //执行一个laypage实例
                                laypage.render({
                                    elem:'paging',//
                                    count:msg.count,//数据总数,从服务器得到
                                    limit:4,//一页展示多少条数据
                                    curr:msg.curr,//当前页
                                    theme:'#4e66f1',
                                    jump:function(obj,first){//jump就是 点击上一页或者下一页触发函数自身
                                        if(!first){//设置首次渲染分页无需走业务逻辑处理函数,不然会陷入死循环
                                            //查看全部
                                          getUserInfo(obj.curr);
                                        }
                                    }
                                });
                      });
                    },
                    error:function (msg) {
                        alert("失败");
                    }
                });
              }
        View Code
      • 后端Controller:
      • @GetMapping("/user")
            @ApiOperation("查看用户")
            public ResponseUserVo getUserByPage(@RequestParam int limit,@RequestParam int curr)  {
                log.warn("每页大小:"+limit+"当前页:"+curr);
                List<User> users=userDao.selectAll();
                System.out.println(users.size());
                return new ResponseUserVo(users.size(),curr,PageUtil.getPageByList(users,curr,limit));
            }
        View Code
    • PUT请求:
      • 前端Ajax:
      • <script>
                    layui.use(['form', 'layer'],function() {
                        $ = layui.jquery;
                        var form = layui.form,layer = layui.layer;
                        //监听提交
                        form.on('submit(update)',
                        function(data) {
                            //发异步,把数据提交给php
                            $.ajax({
                                url:'/rest/user/'+data.field.openId,
                                method:'PUT',
                                dataType:'JSON',
                                data:{
                                    openId:data.field.openId,
                                    url:data.field.url,
                                    name:data.field.name
                                },
                                contentType : 'application/x-www-form-urlencoded',
                                success:function(res){
                                    if(res.code=200){
                                        parent.layer.msg('修改成功!', { icon: 1, time: 1000 }, function () {
                                            parent.$('.btn-refresh').click();
                                            parent.location.reload(); //刷新父页面
                                            var index = parent.layer.getFrameIndex(window.name);
                                            parent.layer.close(index);
                                        });
                                    }else {
                                        layer.alert(res.msg, {
                                            icon: 6
                                        },function() {
                                            // 获得frame索引
                                            var index = parent.layer.getFrameIndex(window.name);
                                            //关闭当前frame
                                            parent.layer.close(index);
                                        });
                                    }
                                },
                                error:function (data) {
                                    layer.msg('error!', { icon: 1, time: 1000 });
                                }
                            }) ;
                            return false;
                        });
        
                    });
                </script>
        View Code
      • 后端Controller:
      • @PutMapping("/user/{opid}")
            @ApiOperation(value = "更新操作",notes = "单个更新")
            public Response editUser(@PathVariable String opid,@RequestParam("openId") String openId,@RequestParam("url") String url,@RequestParam("name") String name){
                log.warn("name :"+name+"openId:"+openId+"url:"+url+"opid:"+opid);
                User user=userDao.selectById(opid);
                if(user!=null){
                    user.setName(name);
                    user.setUrl(url);
                    userDao.updateUser(user);
                    return new Response(200,"ok");
                }else{
                    return new Response(201,"error");
                }
            }
        View Code
    • DELETE请求:
      • 前端Ajax:
      • /*用户-删除*/
                    member_del:function (openId){
                        layer.confirm('确认要删除吗?',function(){
                            $.ajax({
                                type: 'DELETE',
                                dataType: 'json',
                                url: '/rest/user/'+openId,
                                success: function (msg) {
                                  vm.sites = msg.users;
                                  layer.msg('已删除!',{icon:1,time:1000});
                                  getUserInfo();
                                },
                                error:function (msg) {
                                    layer.msg('删除失败!',{icon:1,time:1000});
                                }
                            });
                        });
                    }
        View Code
      • 后端Controller:
      • @DeleteMapping("/user/{openId}")
            @ApiOperation(value = "删除操作" ,notes = "根据openId删除")
            @ApiImplicitParam(name = "openId",value = "openId删除",required = true,dataType = "String")
            public ResponseUserVo delUser(@PathVariable String openId)  {
                log.warn("删除openId:"+openId);
                userDao.delUser(openId);
                List<User> users=userDao.selectAll();
                return new ResponseUserVo(users.size(),1,PageUtil.getPageByList(users,1,2));
            }
        View Code

    • @ApiImplicitParam:作用在方法上,表示单独的请求参数 。
    @ApiImplicitParam(name = "openId",value = "openId删除",required = true,dataType = "String")
      • 参数:
      1. name :参数名。
      2. value : 参数的具体意义,作用。
      3. required : 参数是否必填。
      4. dataType :参数的数据类型。
      5. paramType :查询参数类型(可以不用),这里有几种形式:
        path    以地址的形式提交数据
        query  直接跟参数完成自动映射赋值
        body    以流的形式提交 仅支持POST
        header 参数在request headers 里边提交
        form    以form表单的形式提交 仅支持POST

    • Ajax中关于contentType : "application/x-www-form-urlencoded;charset=UTF-8"与contentType: "application/json"的用法:
      • 用contentType : "application/x-www-form-urlencoded"的话,在后端使用@RequestParam注解去修饰接口中对应Ajax中的data数据。
        • @RequestParam:它的作用等同于HttpServletRequest request,request.getParameter(""),使用这个注解去获取data中的json对象属性值。
      • 用contentType: "application/json"的话,后端使用@RequestBody注解去修饰接口中的对象。
        • @RequestBody:接受的是一个json对象的字符串,而不是Json对象,在请求时往往都是Json对象,用JSON.stringify(data)的方式就能将对象变成json字符串。

    • @PathVariable:是spring3.0的一个新功能:接收请求路径中占位符的值。
      @PutMapping("/user/{openId}") 
      @ApiOperation(value
      = "更新操作",notes = "单个更新")
      public Response editUser(@PathVariable String openId,@RequestParam("url") String url,@RequestParam("name") String name){
      }
      • 通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“)。

  • 相关阅读:
    算法与数据结构实验题 5.2 Missile
    算法与数据结构实验题 2.3 击鼓传花
    算法与数据结构实验题 2.4 排队
    Linux 添加自定义命令
    转 32位linux内核2.6.38.2添加系统调用,编写类似"ps"命令模块显示进程信息
    Linux内核模块程序加载方法
    Linux下sched.h文件分析
    Kali 爆破和非爆破无线路由账号和密码+让别人无线掉线
    Kali基于路由器的ARP欺骗转发机制
    Kali nmap教程用法简介
  • 原文地址:https://www.cnblogs.com/LJing21/p/11477648.html
Copyright © 2020-2023  润新知