问题:控制台显示我们查出来值了,但是最终返回的是数据是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值了