Swagger直接返回MybatisPlus的Page类文档不展开显示问题剖析

简介: Swagger直接返回MybatisPlus的Page类文档不展开显示问题剖析

原写法

public RestResponse<Page<RefundPageResp>> refuntList(){
}
public class RestResponse<T> {
    private Integer restCode;
    private String restMsg;
    private T restContext;
}

Page是MybatisPlus的分页查询实体com.baomidou.mybatisplus.extension.plugins.pagination.Page
Swagger文档上是这样显示的,不能展开,显然不符合需求。
在这里插入图片描述

思路

因为Page是源码不方便修改,我们先抄一个。

public class MyPage<T> {
    private List<T> records = Collections.emptyList();
    /**
     * 总数
     */
    private long total = 0;
    /**
     * 每页显示条数,默认 10
     */
    private long size = 10;
    /**
     * 当前页
     */
    private long current = 1;
    /**
     * <p>
     * SQL 排序 ASC 数组
     * </p>
     */
    private String[] ascs;
    /**
     * <p>
     * SQL 排序 DESC 数组
     * </p>
     */
    private String[] descs;
    /**
     * <p>
     * 自动优化 COUNT SQL
     * </p>
     */
    private boolean optimizeCountSql = true;
    /**
     * <p>
     * 是否进行 count 查询
     * </p>
     */
    private boolean isSearchCount = true;

    public MyPage(List<T> records, long total, long size, long current) {
        this.records = records;
        this.total = total;
        this.size = size;
        this.current = current;
    }

    public List<T> getRecords() {
        return records;
    }

    public void setRecords(List<T> records) {
        this.records = records;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public long getCurrent() {
        return current;
    }

    public void setCurrent(long current) {
        this.current = current;
    }

    public String[] getAscs() {
        return ascs;
    }

    public void setAscs(String[] ascs) {
        this.ascs = ascs;
    }

    public String[] getDescs() {
        return descs;
    }

    public void setDescs(String[] descs) {
        this.descs = descs;
    }

    public boolean isOptimizeCountSql() {
        return optimizeCountSql;
    }

    public void setOptimizeCountSql(boolean optimizeCountSql) {
        this.optimizeCountSql = optimizeCountSql;
    }

    public boolean isSearchCount() {
        return isSearchCount;
    }

    public void setSearchCount(boolean searchCount) {
        isSearchCount = searchCount;
    }

    public static <T> MyPage<T> restPage(Page<T> page) {
        return new MyPage<>(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent());
    }
}

调整后

public RestResponse<MyPage<RefundPageResp>> refuntList(){
}

无任何变化
在这里插入图片描述
我们看到isSearchCount字段应该考虑是否是其影响,is开头的属性字段是会影响字段值的存取的,我们可以看到,我自动生成的两个boolean类型的字段

public boolean isOptimizeCountSql() {
    return optimizeCountSql;
}
public void setOptimizeCountSql(boolean optimizeCountSql) {
    this.optimizeCountSql = optimizeCountSql;
}
public boolean isSearchCount() {
    return isSearchCount;
}

public void setSearchCount(boolean searchCount) {
    isSearchCount = searchCount;
}

原因

optimizeCountSql:字段类型为boolean,其get方法是isOptimizeCountSql()
然而
isSearchCount:按照原则其get方法应该为isIsSearchCount()
同理set方法应该为setIsSearchCount()
调整后

public boolean isIsSearchCount() {
    return isSearchCount;
}
public void setIsSearchCount(boolean searchCount) {
    isSearchCount = searchCount;
}

正常展开
在这里插入图片描述

最佳实践

Mybatis的查询对象Page其创建目的是为了构建查询SQL,很多字段是不需要传递给前端的,包括其他框架的分页对象也是不需要返回给前端的,我们可以构建一个自己的PageResult。

@Data
public final class PageResult<T> {
    private final Integer pageNum;
    private final Integer pageSize;
    private final Long total;
    private final List<T> list;

    private PageResult(@NotNull Integer pageNum, @NotNull Integer pageSize, @NotNull Long total, @Nullable List<T> list) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.total = total;
        this.list = list;
    }


    public static <T> PageResult<T> restPage(@NotNull Integer pageNum, @NotNull Integer pageSize, @NotNull Long total, @Nullable List<T> list) {
        return new PageResult<>(pageNum, pageSize, total, Optional.ofNullable(list).orElse(Collections.emptyList()));
    }

    /**
     * 将MyBatis Plus 分页结果转化为通用结果
     *
     */
    public static <T> PageResult<T> restPage(@NotNull Page<T> page) {
        return new PageResult<>(page.getPageNum(), page.getPageSize(), page.getTotal(), page.getResult());
    }

    /**
     * 将MyBatis Plus 分页结果转化为通用结果
     *
     */
    public static <T> PageResult<T> restPage(@NotNull PageInfo<T> page) {
        return new PageResult<>(page.getPageNum(), page.getPageSize(), page.getTotal(), page.getList());
    }

    /**
     * 将Jpa分页结果转化为通用结果
     */
    public static <T> PageResult<T> restPage(@NotNull org.springframework.data.domain.Page<T> page) {
        return new PageResult<>(page.getNumber()+1, page.getSize(), page.getTotalElements(), page.getContent());
    }

}
目录
相关文章
|
2月前
|
数据可视化 Linux API
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
|
4月前
|
数据可视化 Linux API
使用Docker安装部署Swagger Editor并远程访问编辑API文档
使用Docker安装部署Swagger Editor并远程访问编辑API文档
52 0
|
SQL 缓存
mybatisplus分页查询——Page
(2)各个参数的含义 (1)records:用来存放查询出来的数据 (2)total: 用来返回记录的总数 (3)size: 每页显示条数,默认 10 (4)current:表示当前页,默认1 (5)orders: 排序字段信息 (6)optimizeCountSql: 自动优化 COUNT SQL,默认true (7)isSearchCount: 是否进行 count 查询,默认true (8)hitCount: 是否命中count缓存,默认false
|
5月前
|
Dubbo Java 测试技术
提升API文档品质:Swagger annotations (注解)使用教程
Swagger 提供的注解集是其框架中定义 API 规范和文档的重要工具。这些注解在代码里标注重要部分,为 Swagger 的解析工作铺路,进而生成详尽的 API 文档。开发者编写的注释能够被转换成直观的文档,并展现API端点、参数和响应等信息。这不仅提升了开发人员对 API 运作的理解与沟通,也使得测试和集成过程更加顺畅。
|
4月前
|
XML Java 数据库连接
mybatis-plus里面的Page
mybatis-plus里面的Page
35 0
|
4月前
|
Java 关系型数据库 MySQL
结合springboot+mybatis-plus+lombok,自定义Page封装类
结合springboot+mybatis-plus+lombok,自定义Page封装类
54 0
|
7月前
|
API Python
flask 生成swagger文档
flask 生成swagger文档
95 0
|
7月前
使用Swagger 让某些接口不显示在文档
使用Swagger 让某些接口不显示在文档
36 0
|
7月前
|
Java API 网络架构
Spring Boot 学习研究笔记(六) -使用 Swagger 集成文档
Spring Boot 学习研究笔记(六) -使用 Swagger 集成文档
|
9月前
|
Java 测试技术 API
Spring Boot之Restful服务与Swagger框架:构建易用的API文档与测试工具
本篇详细介绍了如何在Spring Boot应用中构建Restful服务,并结合Swagger框架实现自动生成API文档和提供API测试工具的方法。通过编写Controller类定义Restful API,以及配置Swagger框架,读者可以轻松地生成API文档和进行API测试,从而提升开发效率和项目可维护性。该博文帮助读者了解了如何使用Spring Boot和Swagger框架来简化API文档编写和测试的过程,为Web应用开发提供了有力的支持。
208 2
Spring Boot之Restful服务与Swagger框架:构建易用的API文档与测试工具