关于debug调试在Controller中形参PageWeb<T>(即分页封装泛型)的pageNum,pageSize赋值问题

问题:控制台显示我们查出来值了,但是最终返回的是数据是null

 

问题原因:PageWeb的pageNum和pageSize的值受前端值传递影响,pageNum,totalSize受mybatisPlus的page方法影响,从而造成数据显示不出来

Controller类中代码

@Slf4j
@RestController
@RequestMapping("notice")
public class NoticeController {

    @Resource
    private NoticeService noticeService;
/**
     * 查看通知公告接口
     *
     * @param pageWeb
     * @return
     */
   
    @GetMapping("getManagerNotice")
    public ResultJson getManagerNotice(@RequestBody PageWeb<Notice> pageWeb) {

        Page<Notice> page = new Page<>(pageWeb.getPageNum(), pageWeb.getPageSize());
        QueryWrapper<Notice> noticeQueryWrapper = new QueryWrapper<>();
        noticeQueryWrapper.eq("state", NoticeConstant.PUBLIC_ALREADY);

        if (!StringUtils.isEmpty(pageWeb.getParams().getTitle())) {
            noticeQueryWrapper.like("title", pageWeb.getParams().getTitle());
        }
        if (!StringUtils.isEmpty(pageWeb.getParams().getContent())) {
            noticeQueryWrapper.like("content", pageWeb.getParams().getContent());
        }
        if (!StringUtils.isEmpty(pageWeb.getParams().getFromId())) {
            noticeQueryWrapper.eq("from_id", pageWeb.getParams().getFromId());
        }
        if (!StringUtils.isEmpty(pageWeb.getParams().getToId())) {
            noticeQueryWrapper.eq("to_id", pageWeb.getParams().getToId());
        }
        if (!StringUtils.isEmpty(pageWeb.getParams().getCreateTime())) {
            noticeQueryWrapper.like("create_time", pageWeb.getParams().getCreateTime());
        }
        IPage<Notice> ipage = noticeService.page(page, noticeQueryWrapper);

        return ResultJson.ok(PageWeb.bulidPageWeb(ipage));
    }

}

PageWeb<T> 分别封装泛型类

package com.fourthgroup.schoolmanagementsystem.common.web;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fourthgroup.schoolmanagementsystem.common.constant.WebConstant;
import lombok.Data;

import java.util.List;

@Data
public class PageWeb<T> {
    private long pageNum=1L;
    private long pageSize=20L;
    private long totalSize;
    private T params;
    private List<T> records;


    public static PageWeb bulidPageWeb(IPage page) {
        return new PageWeb(page.getCurrent(), page.getSize(), page.getTotal(), page.getRecords());
    }

    public PageWeb(long pageNum, long pageSize, long totalSize, List<T> records) {
       
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.totalSize = totalSize;
        this.records = records;
    }
}

在Postman中传参(Json格式)

 

 此时我们没有传递pageNum和pageSize,而我们在Controller中的

Page<Notice> page = new Page<>(pageWeb.getPageNum(), pageWeb.getPageSize());

的page构造器中传递的是pageWeb.getPageNum(), pageWeb.getPageSize(),

我们debug调试一下,在page方法行打断点

 

此时我们获取的值是我们在PageWeb里面赋的值,但我们Postman没传值,所以我们之前写好的值,会被Postman中的值覆盖掉,

之后我们在再PageWeb的变量中打断点

pageNum变成了1,totalSize变成了2,但pageSize是0,这导致了我们的数据回显不出来

因为page方法执行之后,得出来值会自动覆盖PageWeb的值,



解决方法:

在构造器中赋值,并判空赋值


 

package com.fourthgroup.schoolmanagementsystem.common.web;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fourthgroup.schoolmanagementsystem.common.constant.WebConstant;
import lombok.Data;

import java.util.List;

@Data
public class PageWeb<T> {
    private long pageNum;
    private long pageSize;
    private long totalSize;
    private T params;
    private List<T> records;


    public static PageWeb bulidPageWeb(IPage page) {
        return new PageWeb(page.getCurrent(), page.getSize(), page.getTotal(), page.getRecords());
    }

    public PageWeb(long pageNum, long pageSize, long totalSize, List<T> records) {
        if (pageNum== 0) {
            this.pageNum = Long.valueOf(WebConstant.DEFAULT_PAGE_NO);
        } else {
            this.pageNum = pageNum;
        }

        if (pageSize == 0) {
            this.pageSize = Long.valueOf(WebConstant.DEFAULT_PAGE_SIZE);
        }else{
            this.pageSize = pageSize;
        }

        this.totalSize = totalSize;
        this.records = records;
    }
}

 

继续debug 

 

因为我们在构造器中判空,所以他会自动给我们赋值

Long.valueOf(WebConstant.DEFAULT_PAGE_NO),我们这里设置的默认为1; Long.valueOf(WebConstant.DEFAULT_PAGE_SIZE),我们这里设置的默认为20

整体下来之后,records就有ArrayList值了 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将查询结果封装为分页对象,首先需要创建一个分页对象,一般包括以下属性: - pageNum:当前页码; - pageSize:每页显示的记录数; - total:总记录数; - pages:总页数; - list:当前页的记录列表。 在 Java ,可以使用 ArrayList 或其他 List 实现类封装记录列表,使用一个自定义的分页对象封装上述属性。例如: ```java public class Page<T> { private int pageNum; // 当前页码 private int pageSize; // 每页显示的记录数 private long total; // 总记录数 private int pages; // 总页数 private List<T> list; // 当前页的记录列表 // 省略 get 和 set 方法 } ``` 接下来,在查询结束后,根据查询结果计算总记录数和总页数,然后将当前页的记录列表封装到分页对象,最后返回分页对象即可。例如: ```java public Page<User> queryUserList(int pageNum, int pageSize) { // 查询当前页的记录列表 List<User> userList = userMapper.queryUserList(pageNum, pageSize); // 查询符合条件的总记录数 long total = userMapper.queryUserCount(); // 计算总页数 int pages = (int) Math.ceil((double)total / pageSize); // 封装分页对象并返回 Page<User> page = new Page<>(pageNum, pageSize, total, pages, userList); return page; } ``` 以上代码,`queryUserList` 方法查询当前页的记录列表,`queryUserCount` 方法查询符合条件的总记录数。然后根据每页显示的记录数、总记录数和当前页码计算总页数,最后将当前页的记录列表和其他属性封装到分页对象,返回给调用方。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值