【Java】若依前后端分离,分页数据为null报错

本文讲述了若依开发时的报错情况,前端控制台显示为后台返回出错,后端报错空指针错误。初步分析发现反复判空不高效,进而进行源码分析,定位到BaseController中的getDataTable方法有问题,最后强调多查看源码解决问题。

今天用若依开发的时候又发生了报错。

1. 表象报错

前端:
在这里插入图片描述
查看控制台:
在这里插入图片描述
这一看就不是前端的错误了,明显是后台返回出错了!

后端:
在这里插入图片描述
很明显,后端报错空指针错误。

2. 分析

2.1 初步分析

	// com.ruoyi.pdmc.controller.PdmcFormController.myApproval
    /**
     * 查询我的审批 s
     * @param id userId
     * */
    @PreAuthorize("@ss.hasPermi('pdmc:form:query')")
    @GetMapping("/myApproval")
    public TableDataInfo myApproval(Long id){
        startPage();
        List<Map<String,Object>> list = pdmcRequestService.myApproval(id);
        return getDataTable(list);
    }

很简单,很常用的方法。
当然,我们此时可以在这里直接判断空,然后做业务操作(这里不展开)。
但是如果我分页用得比较多,而且空值比较多的情况下,就需要反复对null进行判断,这一点都不酷的(code)。
此时!
就需要我们稍微去看一下若依的源码。

2.2 源码分析

List<Map<String,Object>> list = pdmcRequestService.myApproval(id);

这句话总没有什么问题,对吧
那出问题的就是这段代码:

return getDataTable(list);

同样的,return不会出什么错。那就是 getDataTable的问题。
分页的问题!

当我们定位到 BaseController中的getDataTable方法,基本就结束了。

    /**
     * 响应请求分页数据
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTable(List<?> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }

问题就出在

rspData.setTotal(new PageInfo(list).getTotal());

3. 解决方案

    /**
     * 响应请求分页数据
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTable(List<?> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        if (list != null){
            rspData.setTotal(new PageInfo(list).getTotal());
        }
        rspData.setTotal(0);
        return rspData;
    }

4. 后记

其实有些问题并不难,还是多看下源码。源码也不难。没必要一碰到问题就去git上issue。然后作者问你复现的条件,你又支支吾吾说不出来。

多看看源码,不难。

加油,打工仔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值