• RESTful 接口设计



    RESTful 接口设计

    1.获取所有员工列表

    /**
     * 获取所有员工
     * 1. 请求路径--确认资源--员工--/employees
     * 2. 请求方法--get
     * 3. 请求参数--无
     * 4. 请求响应--多个员工--List--json
     */
    @RequestMapping(value = "/employees", method = RequestMethod.GET)
    @ResponseBody
    public List<Employee> list(){
        //查询MySQL数据库得到员工列表信息
        //假装查询数据库
        List<Employee> list = Arrays.asList(new Employee(1L, "大王", 18),new Employee(2L, "小李", 19),new Employee(3L, "小查", 20));
        return list;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    2.增加一个员工

    /**
     * 增加一个员工
     * 1. 请求路径--确认资源--员工--/employees
     * 2. 请求方法--POST
     * 3. 请求参数--Employee
     * 4. 请求响应--Employee--json
     */
    @RequestMapping(value = "/employees", method = RequestMethod.POST)
    @ResponseBody
    public Employee add(Employee employee){
        //假设添加员工
        employee.setId(1L);
        return employee;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    3.更新员工

    /**
     * 更新一个员工
     * 1. 请求路径--确认资源--员工--/employees
     * 2. 请求方法--PUT
     * 3. 请求参数--id,name,age
     * 4. 请求响应--Employee--json
     */
    @RequestMapping(value = "/employees", method = RequestMethod.PUT)
    @ResponseBody
    public Employee update(Employee employee){
        //假设添加员工
        employee.setName(employee.getName() + "_update");
        return employee;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    4.删除员工

    添加一个统一的接口响应对象
    在域名反写的包下,新建一个Java文件util.JsonResult

    package org.chad.util;
    
    
    import lombok.AllArgsConstructor;
    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import lombok.Setter;
    
    //统一的接口响应对象
    @Setter
    @Getter
    @AllArgsConstructor
    @NoArgsConstructor
    public class JsonResult {
        private int code;  //请求状态码 成功200 操作失败500 没有登录403
        private String msg; //请求操作之后的返回信息
        private Object data; //请求的响应数据
    
        public static JsonResult error(String msg){
            return new JsonResult(500, msg, null);
        }
        public static JsonResult error(String msg, Object data){
            return new JsonResult(500, msg, data);
        }
    
        public static JsonResult success(){
            return new JsonResult(200, "操作成功", null);
        }
        public static JsonResult success(Object data){
            return new JsonResult(200, "操作成功", data);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    编写删除员工的代码

    /**
     * 删除一个员工
     * 1. 请求路径--确认资源--员工--/employees
     * 2. 请求方法--DELETE
     * 3. 请求参数--id
     * 4. 请求响应--删除之后的状态--jsonResult--json
     *
     * jsonResult:统一的响应返回值
     *
     * {
     *     code:200,
     *     msg:"操作成功”,
     *     data:null
     * }
     */
    @RequestMapping(value = "/employees", method = RequestMethod.DELETE)
    @ResponseBody
    public JsonResult delete(Long id){
        return JsonResult.success();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    postman显示
    在这里插入图片描述

    5.查询单个员工

    /**
     * 获取某一个员工
     * 1. 请求路径--确认资源--员工--/employees
     * 2. 请求方法--get
     * 3. 请求参数--id
     * 4. 请求响应--一个员工--Employee--json
     */
    @RequestMapping(value = "/employees", method = RequestMethod.GET)
    @ResponseBody
    public Employee oneList( Long id){
        return new Employee(id, "张三", 18);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    我们会发现运行不起来

    查询所有员工接口:/ employees GET
    查询单个员工接口: /employees GET
    上面2个接口映射路径与请求方法完全相同,Spring MVC认为是同一个接口,下能同时存在,此时怎么办?
    方案1:使用多级路経方式比如:/ employees / detail
    方案2:使用参数路怪方式比如:/ employees /{ id }将请求参数作为路径一部分,进打 url 区分。
    参数路径:/ employees /( id } 其中{ id }参数占位符
    客户端访问 http://Localhost:80/employees/1 1就是 id 参数值
    注意点:
    接口要获取参数路経中参数必须使用注 @PathVariable ,目的是让 springmvc 参数解析器从路径中解析出参数并进行赋值。如果参数路怪中的占位符名称与请求映射方法形式参数名称不一致时,必须明确的指定映射
    “/ employees /( eid }”—>@ PathVariable (" eid ") Long id

    改变后

    /**
     * 获取某一个员工
     * 1. 请求路径--确认资源--员工--/employees
     * 2. 请求方法--get
     * 3. 请求参数--id
     * 4. 请求响应--一个员工--Employee--json
     */
    @RequestMapping(value = "/employees/{id}", method = RequestMethod.GET)
    @ResponseBody
    public Employee oneList(@PathVariable Long id){
        return new Employee(id, "张三", 18);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    至此可以正常查询

  • 相关阅读:
    第一章 数据库绪论
    Blender:使用立方体制作动漫头像
    python代码是如何执行的?
    设计模式-行为型模式-模板方法模式
    索引知识总结
    EM@常用三角函数图象性质(中学部分)
    git常用命令和参数有哪些?【git看这一篇就够了】
    基于JAVA农村留守儿童帮扶系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    【网络协议】聊聊ICMP与ping是如何测试网络联通性
    UE5 - UI Material Lab 学习笔记
  • 原文地址:https://blog.csdn.net/Chad_it/article/details/127908803