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

7,781 阅读2分钟

拿走了什么

今天来说下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<String,Object> 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<String ,Object> map){

        return userService.queryUserById(map);
    }

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

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

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