持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
前言
通过前面几天的学习,我们实现了查询用户,增加用户,更新用户以及删除用户这一整套接口,实现了对数据库的增删改查操作,那么今天我们就来改进一下整体项目。
相对比我们直接返回通过Mapper获取的数据库数据,在实际项目中,都会再对数据进行封装一下,比如这样:
以这样在外层套一层JSON的格式将我们的实际数据封装起来,最外层还有code、dts、msg等字段。
{
"code": 200,
"data": Object,
"dts": 1656505387915,
"msg": "success"
}
在四个字段分别代表的意思为:
- code:业务状态,比如:找不到指定数据,返回101啊,参数错误,返回109啊,服务端定义好就行。
- data:数据,通过SQL从数据库拿到的数据,封装成一个Bean对象。
- dts:服务器时间戳,帮助调用接口的前端来矫正时间。
- msg:提示信息,配合业务状态,比如:参数错误,提示”params error“。
接下来就让我们来实践一下吧。
实践
我们将 /users/{name} 这个通过用户名来查询指定用户的这一条接口进行改进一下。
首先,我们需要新建一个BaseBean类,来进行封装实际的用户数据UserBean。BaseBean类只有四个字段,分别是code、data、dts、msg ,且需要注意的是data是个泛形,因为他需要支持所有被封装数据的类型。
public class BaseBean<T> {
int code;
T data;
Long dts;
String msg;
//1
public BaseBean(T data) {
this.code = 200;
this.data = data;
this.dts = System.currentTimeMillis();
this.msg = "success";
}
public BaseBean(int code, T data, Long dts, String msg) {
this.code = code;
this.data = data;
this.dts = dts;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public Object getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Long getDts() {
return dts;
}
public void setDts(Long dts) {
this.dts = dts;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
且为了方便封装成功状态的数据,我们实现了一个构造函数,提供成功的提示,code为200,msg为success,这样只需要传入数据即可。
实现好BaseBean后,接下来,我们只需要将UserController中的getUserByName() 方法更改一下即可。
@GetMapping("/users/{name}")
public BaseBean<UserBean> getUserByName(@PathVariable String name) {
//1
UserBean ub = userService.getUserByName(name);
if (ub == null) {
//2
return new BaseBean<UserBean>(101, null, System.currentTimeMillis(), "not found user the name is " + name);
} else {
//3
return new BaseBean<UserBean>(ub);
}
}
第一步还是跟之前一样,通过mapper从数据库中获取到用户,实际走的就是SELECT *** FROM user WHERE **name** = #{name} 这个SQL语句。接着就是编写我们服务端的业务代码,这里我们对获取到的用户数据ub进行判空处理,如果ub为空,就意味着从数据库中找不到相匹配的数据,所以我们返回code为101,data为null,msg为”not found user the name is $name”。反之,ub不为空,就意味我们找到了数据库中匹配的数据,所以我们返回code为200,data为ub,msg为”success“。
接着我们直接运行项目,然后在postman中进行调试,具体结果查看下图。
通过name为li成功匹配到了数据。
而输入name为Joanna时,匹配不到数据。
总结
今天,我们新建了一个BaseBean类,用来封装通过mapper获取到数据库的真实数据,利用code与msg方便结合业务逻辑,更加方便前端同学调用接口。