IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【基于springboot的SSMP整合案例1】表现层开发及使用postman测试3 -> 正文阅读

[Java知识库]【基于springboot的SSMP整合案例1】表现层开发及使用postman测试3

1. 基于Restful制作表现层接口

咱们表现层的开发使用基于Restful的表现层接口开发功能测试通过Postman工具进行。
Restful在之前的blog有介绍过,不熟悉的小伙伴可以回头找相关知识进行补充,postman是一个接口的测试工具,这里也不做过多解释,直接使用。

BookController

  1. PUT请求传递json数据,后台实用@RequestBody接收数据
  2. GET请求传递路径变量,后台实用@PathVariable接收数据
@RestController
@RequestMapping("/books")
public class BookController2 {

    @Resource
    private IBookService bookService;

    @GetMapping
    public List<Book> getAll(){
        return bookService.list();
    }

    @GetMapping("/{id}")
    public Book testGetById(@PathVariable int id){
        Book book = bookService.getById(id);
        return book;
    }

    @PutMapping
    public boolean update(@RequestBody Book book){
        return bookService.updateById(book);
    }

    @DeleteMapping("/{id}")
    public boolean delete(@PathVariable int id){
        return bookService.removeById(id);
    }

    @PostMapping
    public boolean insert(@RequestBody Book book){
        return bookService.save(book);
    }

    @GetMapping("{currentPage}/{pageSize}")
    public IPage<Book> testPage(@PathVariable int currentPage,@PathVariable int pageSize){
        return bookService.getPage(currentPage,pageSize);
    }
}

2. 使用postman进行接口测试

接下来我们通过postman进行接口测试

  1. 查询全部,查询都是通过Get请求
    在这里插入图片描述

  2. 新增测试:POST请求
    新增的数据是通过JSON数据格式进行添加
    在这里插入图片描述

  3. 更新测试:PUT请求
    在这里插入图片描述

  4. 删除测试: DELETE请求
    在这里插入图片描述

  5. 分页请求: GET请求
    在这里插入图片描述

3. 表现层消息一致性处理(重要)

目前我们通过Postman测试后业务层接口功能是通的,但是这样的结果给到前端开发者会出现一个小问题。不同的操作结果所展示的数据格式差异化严重
比如上述测试,增删改返回值是true,id查询结果返回实体类对象,查询全部返回集合,这样的结果让前端人员看了是很容易让人崩溃的,必须将所有操作的操作结果数据格式统一起来,需要设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

3.1 创建结果集实体类R

创建实体类R,并编写构造方法。

@Data
public class R {
    private Boolean flag;
    private Object data;
    
	public R(){}

    public R(boolean flag){
        this.flag = flag;
    }

    public R(boolean flag,Object data){
        this.flag = flag;
        this.data = data;
    }
}

3.2 修改表现层接口

@RestController
@RequestMapping("/books")
public class BookController {

    @Resource
    private IBookService bookService;

    @GetMapping
    public R getAll() {
        /*R r = new R();
        List<Book> list = bookService.list();
        r.setFlag(true);
        r.setData(list);*/

        //凡是查询,flag统一设置成true
        return new R(true, bookService.list());
    }

    @GetMapping("/{id}")
    public R testGetById(@PathVariable int id) {
        return new R(true, bookService.getById(id));
    }

   /* @GetMapping("{currentPage}/{pageSize}")
    public R testPage(@PathVariable int currentPage, @PathVariable int pageSize) {
        IPage<Book> page = bookService.getPage(currentPage, pageSize);
        if(currentPage > page.getPages()){
            //如果当前页码大于总页码,重新查询一遍
            //加int强转是因为getPages返回long型,然后将getPage里面的参数currentPage换成page.getPages()
            page = bookService.getPage((int)page.getPages(), pageSize);
        }
        return new R(true,page);
        //return new R(true, bookService.getPage(currentPage, pageSize));
    }*/
    @GetMapping("{currentPage}/{pageSize}")
    public R testPage(@PathVariable int currentPage, @PathVariable int pageSize,Book book) {
        IPage<Book> page = bookService.getPage(currentPage, pageSize,book);
        if(currentPage > page.getPages()){
            //如果当前页码大于总页码,重新查询一遍
            //加int强转是因为getPages返回long型,然后将getPage里面的参数currentPage换成page.getPages()
            page = bookService.getPage((int)page.getPages(), pageSize,book);
        }
        return new R(true,page);
    }

    @PutMapping
    public R update(@RequestBody Book book) {
        return new R(bookService.updateById(book));
    }

    @DeleteMapping("/{id}")
    public R delete(@PathVariable int id) {
        return new R(bookService.deleteById(id));
    }

    @PostMapping
    public R insert(@RequestBody Book book) throws Exception {

        if (book.getName().equals("123")) throw new Exception();

        boolean flag = bookService.save(book);
        //return new R(bookService.save(book));
        return new R(flag, flag ? "添加成功^_^" : "添加失败");
    }
}

3.3 使用postman进行接口测试

我们简单测试几个,看看数据集的封装情况
根据id查询
在这里插入图片描述
新增请求
在这里插入图片描述
通过上面接口的测试结果,可以看出,我们查询出来的数据集都已经封装,现在后端发送给前端的数据格式就统一了,免去了不少前端解析数据的麻烦。

总结:

  1. 设计统一的返回值结果类型便于前端开发读取数据

  2. 返回值结果类型可以根据需求自行设定,没有固定格式

  3. 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:04:04  更:2022-04-06 16:05:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:40:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码