SSMP整合案例(9) 统一表现层数据返回格式

上文 SSMP整合案例(8) Restful开发表现层接口 我们就已经是把表现层的接口写完了
但是 我们会发现 现在前端人员拿到我们的数据 格式看着非常的乱
我们 数据库 添加 修改 删除 就是但数据的格式 一个 布尔值
查询 就是 查多个 一个集合
查询 全部 则就是 一个对象的格式
还有分页的一个 IPage的一个单对象的格式
五花八门

不同数据 解析方式是不一样的 前端同事看着就会非常崩溃了

那么 我们可以统一一下 例如 我们返回的数据 都可以放在 data的字段中
但是 这样 我们查询错误 或者没查到时 就会出现 null的情况

那么 我们就会给前端一个这样的东西

{data: null
}

这个是很有争议的 因为 这个null 也不一定是没有数据 也可能是系统异常导致的 还有一些外界因素

所以 只有一个data 显然不太够 我们前端同事显然不知道怎么去提示用户 是数据异常啊 还是怎么了
我们加个 state 如果是 200 表示成功了

{data: {state: 200,name: 数据}
}

失败则是

{data: {state: 500,name: null}
}

具体的 大家可以去了解一下 HTTP状态码
但是 后台我们运行过程中 也可能出现各种各样问题
这个 我们还需要给个输出语句
message
例如

{data: {state: 200,name: 数据,message: "操作成功"}
}

或者

{data: {state: 500,name: null,message: "系统异常"}
}

在我们项目之前的 controller 包下创建一个包 叫 utils
utils包下创建一个 ResultUtil 类
在这里插入图片描述
ResultUtil 参考代码如下

package com.example.webdom.controller.utils;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class ResultUtil {private int state;private Object data;private String message;
}

相信大家还记得lombok的Data 自动声明 get和set方法
不然 这里 你还是要自己写get和set函数的
然后 我们通过AllArgsConstructor 给他加上了一个全部参数的构造方法 之前这个我们也讲过

那么 这个类 显然是为 BookController 的请求服务的 那显然 BookController 要改了
先将 getAll 查询全部函数代码更改成这样

@GetMapping
public ResultUtil getAll() {List<book> BookList = IBookService.list();int state = BookList.isEmpty()?500:200;String message = BookList.isEmpty()?"未获取到对应记录":"操作成功";ResultUtil ResultUtil = new ResultUtil(state,BookList,message);return ResultUtil;
}

首先 方法的返回值 我们返回一个ResultUtil对象类型的值
然后 我们定义BookList接收IBookService.list();获取的List集合
然后 用三元运算符给 state 和 message 赋值 BookList.isEmpty() 是在判断 List集合有没有拿到
然后 最后 通过构造方法 将我们处理好的三个字段注入到ResultUtil对象中并返回
我们到Postman中测试一下
在这里插入图片描述
在这里插入图片描述
非常完美

save 添加代码修改如下

@PostMapping
public ResultUtil save(@RequestBody book book){boolean verify = IBookService.save(book);int state = verify?200:500;String message = verify?"操作成功":"系统异常";ResultUtil ResultUtil = new ResultUtil(state,book,message);return ResultUtil;
}

因为 他添加的方法本来返回的就是 boolean 我们直接用它来判断有没有成功 因为他没有数据 所以 data我们直接把他加的这条数据还给他
Postman运行结果如下
在这里插入图片描述
我们看到数据库
我们的数据也是成功加进去了
在这里插入图片描述
修改自然就是改成这样

@PutMapping
public ResultUtil pudata(@RequestBody book book){boolean verify = IBookService.updateById(book);int state = verify?200:500;String message = verify?"操作成功":"系统异常";ResultUtil ResultUtil = new ResultUtil(state,book,message);return ResultUtil;
}

Postman运行结果如下
在这里插入图片描述
我们看到数据库
在这里插入图片描述
数据依旧修改成功
然后删除 这次我们来删一条不存在的数据
我们先把 方法改了

@DeleteMapping("{id}")
public ResultUtil delete(@PathVariable Integer id){boolean verify = IBookService.removeById(id);int state = verify?200:500;String message = verify?"操作成功":"系统异常";ResultUtil ResultUtil = new ResultUtil(state,null,message);return ResultUtil;
}

还是 用布尔接 然后判断操作有没有成功 不过 删除并不涉及任何数据 所以 我们直接给 null
Postman 我们给个不存在的 id 15吧
运行结果如下
在这里插入图片描述
可以看到 我们的返回值处理 也没有什么问题

根据id查询 单个数据 我们这样写

@GetMapping("{id}")
public ResultUtil getById(@PathVariable Integer id){book book = IBookService.getById(id);int state = book != null?200:500;String message = book != null?"操作成功":"系统异常";ResultUtil ResultUtil = new ResultUtil(state,book,message);return ResultUtil;
}

运行结果如下
在这里插入图片描述
然后是分页的查询方式

@GetMapping("/page")
public ResultUtil getPage(@RequestParam int page,int pageSize) {IPage<book> BookPage = IBookService.getPage(page, pageSize);int state = BookPage != null?200:500;String message = BookPage != null?"操作成功":"系统异常";ResultUtil ResultUtil = new ResultUtil(state,BookPage,message);return ResultUtil;
}

本身思路都是一样的
Postman 运行代码如下
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3471.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql进阶(三)之索引篇

文章目录 前言索引介绍1.什么是索引&#xff1f;2.优缺点3.什么时候需要 / 不需要索引&#xff1f;4.语法 索引底层结构1.Hash表2.BTree 索引分类1.按字段特性2.按物理存储3.按字段个数 索引优化1.SQL性能分析2.索引失效3.常见索引优化方法 前言 以面试题驱动索引的学习&#…

【Linux】硬链接 和 软链接

为了方便用户访问文件&#xff0c;Linux提供了一种称为连接&#xff08;link&#xff09;的机制&#xff0c;可以将一个文件或目录与另一个文件或目录建立关联&#xff0c;从而实现多个路径指向同一个文件或目录的效果。 一、概述二、硬链接和软链接详解2.1 硬链接2.11 硬链接的…

如何在小程序中引入使用vant框架

一、vant框架 vantUI框架常用于移动端页面组件的基础库构建&#xff0c;为了让用户获得更趋向于原生的体验&#xff0c;它是一种相当不错的方案选择。 关于这个框架&#xff0c;它不仅有适用于移动端vue脚手架的版本&#xff0c;同时还存在可以兼容小程序开发的webapp版本。在…

你知道什么是生成对抗网络吗

生成对抗网络&#xff08;GANs&#xff09;是一种深度学习模型&#xff0c;已经显示出在许多生成相关任务中的卓越性能。最近几年&#xff0c;越来越多的研究人员将注意力集中于 GAN 的隐空间属性&#xff0c;并提出了许多利用这些属性进行语义图像编辑的方法。然而&#xff0c…

虚幻引擎(UE5)-大世界分区WorldPartition教程(二)

文章目录 前言一、OFPA怎么用二、OFPA怎么用总结 上一篇&#xff1a;虚幻引擎(UE5)-大世界分区WorldPartition教程(一) 前言 在UE4版本中中&#xff0c;Actor是保存在关卡文件中的&#xff0c;也就是说&#xff0c;如果要编辑关卡中的某些Actor&#xff0c;需要签出关卡文件进…

炫技亮点 Websocket集群解决方案汇总

文章目录 问题方案方案一&#xff1a;~~Session共享~~&#xff08;不可行&#xff09;方案二&#xff1a;负载均衡器&#xff08;状态路由&#xff09;方案三&#xff1a;广播机制&#xff08;异步方式 - 建议&#xff09;方案四&#xff1a;路由转发&#xff08;同步方式&…

量子力学的起源和基本概念

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在我们的第一篇文章中&#xff0c;我们进行了量子力学的总体介绍。今天&#xff0c;我们将深入探讨量子力学的起源和一些基本概念。 量子力学的起源可以追溯到20世纪初&#xff0c;当时的科学家们遇到了一些古典物理…

【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

windows10系统下修改jar中的文件并重新打包成jar文件然后运行 一、背景描述二、操作步骤2.1 解压jar包2.2 修改配置文件2.3 重新打成jar包2.4 确认是否修改成功2.5 运行程序 一、背景描述 测试环境&#xff08;Linux&#xff09;的代码&#xff08;jar包&#xff09;拉取到本地…

Java之集合Collection

Collection接口有两个子接口&#xff1a;List(链表|线性表)和Set(集) ---|Collection: 单列集合---|List: 有存储顺序, 可重复---|ArrayList: 数组实现, 查找快, 增删慢由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以…

【深度学习 | CNN】“深入解析卷积神经网络与反卷积:从原理到应用的全面指南” (从一维、二维、三维讲解)

🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩…

设计模式3:单例模式:JMM与volatile和synchronized的关系

本文目录 JMM简介Java 内部内存模型(The Internal Java Memory Model)硬件内存架构(Hardware Memory Architecture)弥合 Java 内存模型和硬件内存架构之间的差距(Bridging The Gap Between The Java Memory Model And The Hardware Memory Architecture)1.共享对象的可见性2.竞…

微软公布量子超级计算机路线图

光子盒研究院 6月22日&#xff0c;微软公布了三个重要的量子计算公告。首先&#xff0c;公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑&#xff0c;并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…