上文 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 运行代码如下