前端同学学习SpringBoot的第 9 天

173 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

前言

通过前面几天的学习,我们实现了查询用户,增加用户,更新用户以及删除用户这一整套接口,实现了对数据库的增删改查操作,那么今天我们就来改进一下整体项目。

相对比我们直接返回通过Mapper获取的数据库数据,在实际项目中,都会再对数据进行封装一下,比如这样:

success-li.png

以这样在外层套一层JSON的格式将我们的实际数据封装起来,最外层还有codedtsmsg等字段。

{
    "code": 200,
    "data": Object,
    "dts": 1656505387915,
    "msg": "success"
}

在四个字段分别代表的意思为:

  • code:业务状态,比如:找不到指定数据,返回101啊,参数错误,返回109啊,服务端定义好就行。
  • data:数据,通过SQL从数据库拿到的数据,封装成一个Bean对象。
  • dts:服务器时间戳,帮助调用接口的前端来矫正时间。
  • msg:提示信息,配合业务状态,比如:参数错误,提示”params error“。

接下来就让我们来实践一下吧。

实践

我们将 /users/{name} 这个通过用户名来查询指定用户的这一条接口进行改进一下。

首先,我们需要新建一个BaseBean类,来进行封装实际的用户数据UserBean。BaseBean类只有四个字段,分别是codedatadtsmsg ,且需要注意的是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中进行调试,具体结果查看下图。

success-li.png

通过name为li成功匹配到了数据。

error-Joanna.png

而输入name为Joanna时,匹配不到数据。

总结

今天,我们新建了一个BaseBean类,用来封装通过mapper获取到数据库的真实数据,利用codemsg方便结合业务逻辑,更加方便前端同学调用接口。