Spring Boot(二)对返回结果的统一封装

拿走了什么

今天来说下Spring Boot中统一返回结果的封装。

为什么要封装结果?

来看一张没有封装的。

再看是经过封装过返回的数据。

从第二张可以看到多了,我们自定义的结果状态、信息以及数据,在我们正常开发的过程中我们需要给前端返回一些带有 状态码的结果,前端会根据这个结果来提示用户操作的结果,像这样成功的会返回 操作成功的消息提示

如果操作失败会返回失败的提示

所以我们对结果的处理会很重要。

步骤

首先创建一个枚举用来RetCode

public enum RetCode {
    //成功
    SUCCESS(200),

    //失败
    FAIL(400),

    //错误
    FALSE(404),

    //内部错误
    ERROR(500);

    private int code;

    private RetCode(Integer code){
        this.code = code;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}
复制代码

里面code的数值你可以根据实际来自定义~ 然后对结果处理的一个类

public class RetResult {
    private  Integer code;
    private String msg;
    private Object data;

    public RetResult(){
        this.code = Integer.valueOf(0);
        this.msg = "";
        this.data = null;
    }
    /**
     *返回状态码、信息、以及数据
     */
    public RetResult(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = "";
        this.data = null;
    }
    /**
    *只返回状态码,以及信息可以用于失败时候来使用
    */
    public RetResult(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
        this.data = null;
    }
    /**
    *只返回状态码和数据
    */
    public RetResult(Integer code, Object data) {
        this.code = code;
        this.msg = "";
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}
复制代码

其中msg是你想要返回的信息,code就是自定义的状态码了,data是要返回的数据,这里我采用了Object类型。而且这里我写了几个重载方法,可以根据自己的需求来灵活调整

改造Service、Controller

把我们上节UserService类改造一下

 public RetResult queryUserById(Map map){
        if(map.get("user_id") == null){
            return new RetResult(RetCode.FAIL.getCode(),"id不能为空");
        }
        return new RetResult(RetCode.SUCCESS.getCode(),userMapper.queryUserById(Long.parseLong(map.get("user_id").toString())));
    }
复制代码

就是把我们之前返回的数据给放到Data中了,然后UserController的改造

@RequestMapping(value = "/user/getUser")
    public RetResult getUser(@RequestBody Map map){

        return userService.queryUserById(map);
    }
复制代码

其中Controller我们可以集中来处理Exception这个以后会加上。 先测试如果我们先不传数据返回的信息:

然后传入正确数据来返回的:

这样体验就很好了~ 欢迎大家来关注我的微信公众号~

转载于:https://juejin.im/post/5c1f8284e51d457054160998

你可能感兴趣的:(Spring Boot(二)对返回结果的统一封装)