IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 给泛型对象赋默认值 -> 正文阅读

[开发测试]给泛型对象赋默认值

1、业务需求

当查询不到数据时不给前端返回null,而是保持swagger文档的输出结果结构并带默认值

改造前

{
  "status": false,
  "data": null,
  "code": 404,
  "message": "未找到资源"
}

改造后

{
  "status": false,
  "data":  {
    "dwrs": "/",
    "spjk": 0,
    "dbjc": false,
    "xhsb": 0L,
    "gzsb": []
  },
  "code": 404,
  "message": "未找到资源"
}

2、封装工具类

为什么要使用泛型,是为了迁就swagger的输出文档ApiModel

/**
 * @Description
 * @Date 2022/4/6 9:31
 * @Author YuLe
 **/
public class BeanInit<T> {

    /**
     * 给泛型对象赋默认值
     *
     * @param old
     * @param <T>
     * @return
     */
    public static <T> T getDefault(T old) {
        try {
            Field[] fields = old.getClass().getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                // 得到field的class及类型全路径
                String fieldClazz = field.getType().toString();
                //System.out.println("字段名称"+field.getName()+"  字段类型" + fieldClazz);
                //Object value = field.get(old);
                //System.out.println("字段值" + value);
                if (fieldClazz.contains("String")) {
                    //字符类型默认 /
                    field.set(old, "/");
                } else if (fieldClazz.contains("List")) {
                    //数组对象默认 []
                    field.set(old, new ArrayList<>());
                } else if (fieldClazz.contains("Double")) {
                    //double对象默认 0L
                    field.set(old, 0L);
                } else if (fieldClazz.contains("boolean")) {
                    //布尔对象默认 false
                    field.set(old, false);
                } else {
                    //数值对象默认 0
                    field.set(old, 0);
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return old;
    }

    public static void main(String[] args) {
        XqcrkjlVo newBean = getDefault(new XqcrkjlVo());
        System.out.println(newBean.toString());
    }
}

3、使用方法

//返回对象的情况
@GetMapping("/ssajdt")
@ApiOperation(value = "实时案件动态")
public Rest<SsajdtVo> ssajdt() {
    return Rest.emptyObj(BeanInit.getDefault(new SsajdtVo()));
}

//返回列表的情况
@GetMapping("/mjxtfx")
@ApiOperation(value = "门禁系统分析", notes = "海创园的设备状态统计,无数据")
public Rest<List<KeyValOfIntVo>> mjxtfx() {
    return Rest.emptyArray();
}

附上统一返回实体类

/**
 * @Description 统一返回报文
 * @Date 2021/6/24 21:42
 * @Author YuLe
 **/
@ApiModel(value = "标准报文")
public class Rest<T> {

    @ApiModelProperty(value = "是否成功")
    private boolean status = true;
    @ApiModelProperty(value = "正常业务对象")
    private T data;
    @ApiModelProperty(value = "响应编号")
    private Integer code;
    @ApiModelProperty(value = "错误信息")
    private String message;

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 系统异常
     *
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> Rest<T> fail(String msg) {
        Rest<T> rest = new Rest<>();
        rest.setCode(500);
        rest.setStatus(false);
        rest.setMessage(msg);
        return rest;
    }

    /**
     * 返给前端空数组
     *
     * @return
     */
    public static <T> Rest<List<T>> emptyArray() {
        Rest<List<T>> rest = new Rest<>();
        rest.setCode(404);
        rest.setStatus(false);
        rest.setMessage("未找到资源");
        rest.setData(new ArrayList<T>());
        return rest;
    }

    /**
     * 返回默认的空对象
     *
     * @param <T>
     * @return
     */
    public static <T> Rest<T> emptyObj(T defaultObj) {
        Rest<T> rest = new Rest<>();
        rest.setCode(404);
        rest.setStatus(false);
        rest.setMessage("未找到资源");
        rest.setData(defaultObj);
        return rest;
    }

    /**
     * 治理平台返回的异常
     *
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> Rest<T> fail(Integer code, String msg) {
        Rest<T> rest = new Rest<>();
        rest.setStatus(false);
        rest.setCode(code);
        rest.setMessage(msg);
        return rest;
    }

    /**
     * 可预见的异常
     *
     * @param me
     * @param <T>
     * @return
     */
    public static <T> Rest<T> fail(ExceptionEnum me) {
        Rest<T> rest = new Rest<>();
        rest.setCode(me.getResultCode());
        rest.setStatus(false);
        rest.setMessage(me.getResultMsg());
        return rest;
    }

    /**
     * 成功报文
     * @param data
     * @param <T>
     * @return
     */
    public static <T> Rest<T> success(T data) {
        Rest<T> rest = new Rest<>();
        rest.setCode(200);
        rest.setData(data);
        rest.setStatus(true);
        return rest;
    }
}

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:47:46  更:2022-04-09 18:48:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:19:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码