springboot日记之封装返回数据模型

参考博文:https://blog.csdn.net/ZHWang102107/article/details/82931584

之前我所在公司程序员后台返回给前台的的数据结构未做统一处理,风格各不同,前台人员也对此深感头疼。这样的代码必然冗余,杂乱,不利于项目的维护与扩展,也浪费大量宝贵的时间。后面来个一个同事,对这一乱像做了改变,是的代码风格焕然一新!今天我也模仿该同事思路做了一个同样的数据封装。以下代码在参考过多人的博客后,对自己写的做了改善出来的最终版的。
封装数据类
思路就是采用泛型类来进行数据模型封装,比较简单,代码如下

/**
 * 
 */
package learn.until;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * 返回给客户端信息实体
 * 
 * @Author: ljg 2020年3月11日 下午9:51:26
 * 
 * @Desc: <p>
 * 用于统一返回给客户端信息实体,统一格式,提高友好度
 * </p>
 */
@Data
@ApiModel
public class RestResponse<T> {
    /**
     * 返回码
     * 
     */
    @ApiModelProperty(value = "返回码")
    private int code;
    /**
     * 返回信息
     * 
     */
    @ApiModelProperty(value = "返回信息")
    private String message;
    /**
     * 返回数据
     */
    @ApiModelProperty(value = "返回数据")
    private T data;
    public RestResponse(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
    public RestResponse(int code, String message) {
        this.code = code;
        this.message = message;
    }
    public RestResponse() {
    }
}

写一个公共类来生成数据对象,我开始是在上面类中写了一个静态生成方法,我觉这样耦合度太高,所以参考了别人的博客,代码如下。

/**
 * 
 */
package learn.until;

import learn.until.staticdata.RestCode;

/**
 * 
 * @Author: ljg 2020年3月12日 上午10:18:48
 * 
 * @Desc: <p>
 * </p>
 */
public class RestResposeUtil {

    /**
     * 成功返回成功实体
     * 
     * @Author ljg 2020年3月11日 下午10:04:39
     * @param data 返回数据
     * @return
     */
    public static <T> RestResponse<T> success(T data) {

        RestResponse<T> restResponse = new RestResponse<T>();
        restResponse.setCode(RestCode.SUCCESS.getCode());
        restResponse.setMessage(RestCode.SUCCESS.getMsg());
        restResponse.setData(data);
        return restResponse;
    }

    /**
     * 创建一个响应实体类
     * 
     * @Author ljg 2020年3月11日 下午10:04:39
     * @param data 返回数据
     * @return
     */
    public static <T> RestResponse<T> createResponse(RestCode restCode, T data) {
        RestResponse<T> restResponse = new RestResponse<T>();
        restResponse.setCode(restCode.getCode());
        restResponse.setMessage(restCode.getMsg());
        restResponse.setData(data);
        return restResponse;
    }

    /**
     * 创建一个响应实体类
     * 
     * @Author ljg 2020年3月11日 下午10:04:39
     * @param data 返回数据
     * @return
     */
    public static <T> RestResponse<T> createResponse(RestCode restCode) {
        RestResponse<T> restResponse = new RestResponse<T>();
        restResponse.setCode(restCode.getCode());
        restResponse.setMessage(restCode.getMsg());
        return restResponse;
    }

    /**
     * 成功返回成功实体
     * 
     * @Author ljg 2020年3月11日 下午10:04:39
     * @param data 返回数据
     * @return
     */
    public static RestResponse<Object> success() {
        return success(null);
    }

    /**
     * 错误返回实体
     * 
     * @Author ljg 2020年3月12日 上午10:26:59
     * @param code 错误码
     * @param msg 错误信息
     * @return
     */
    public static <T> RestResponse<T> error(int code, String msg) {
        RestResponse<T> restResponse = new RestResponse<T>();
        restResponse.setCode(code);
        restResponse.setMessage(msg);
        return restResponse;

    }
}

建一个枚举类型,统一管理code和message,为了更好的降低耦合度,规范代码,利于后期维护,代码如下

/**
 * 
 */
package learn.until.staticdata;

/**
 * 
 * @Author: ljg 2020年3月11日 下午10:07:29
 * 
 * @Desc: <p>
 * </p>
 */
public enum RestCode {
    SUCCESS(200, "success"), ERROR(500, "error"), UNDEFINED_ERROR(-1, "未知错误"), EMPTY(1001, "参数为空");
    int code;
    String msg;

    RestCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

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

    public String getMsg() {
        return msg;
    }

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

实战代码

 @ApiOperation(value = "登陆入口", notes = "登陆逻辑")
    @RequestMapping(value = "/", method = RequestMethod.POST)
    @ResponseBody
    public RestResponse<String> login(@RequestBody UserInfoCond userInfoCond) {
        RestResponse<String> response = null;
        try {
            response = RestResposeUtil.createResponse(RestCode.SUCCESS, loginService.login(userInfoCond));
        } catch (Exception e) {
            response = ExceptionHandleUtil.handle(e);
        }
        return response;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值