JAVA问题随笔-Swagger请求Pageable传参问题
分页查询org.springframework.data.domain 的Pageable参数
在后端使用Pageable进行分页插查询的时候,发现无论怎么传值,后端都是查询第一页,查20条(pageable的默认参数)。
扒拉了一下pageable的源码,找到了原因。
后台集成了swagger,供前台查阅传参和测试。当有分页接口的时候,在swagger看到的参数是这样的:
这是swagger解析后展示的内容,单传参并不生效,然后查看pageable类发现
/**
* Returns the page to be returned.
*
* @return the page to be returned.
*/
int getPageNumber();
/**
* Returns the number of items to be returned.
*
* @return the number of items of that page
*/
int getPageSize();
这样的话swagger解析为pageSize和pageNumber到是没有什么问题,但是方法的实现类:
/*
* (non-Javadoc)
* @see org.springframework.data.domain.Pageable#getPageSize()
*/
public int getPageSize() {
return size;
}
/*
* (non-Javadoc)
* @see org.springframework.data.domain.Pageable#getPageNumber()
*/
public int getPageNumber() {
return page;
}
嗯?黑人问号???返回的是page和size,我们看看他的实现类的字段:
public abstract class AbstractPageRequest implements Pageable, Serializable {
private static final long serialVersionUID = 1232825578694716871L;
private final int page;
private final int size;
/**
* Creates a new {@link AbstractPageRequest}. Pages are zero indexed, thus providing 0 for {@code page} will return
* the first page.
*
* @param page must not be less than zero.
* @param size must not be less than one.
*/
public AbstractPageRequest(int page, int size) {
if (page < 0) {
throw new IllegalArgumentException("Page index must not be less than zero!");
}
if (size < 1) {
throw new IllegalArgumentException("Page size must not be less than one!");
}
this.page = page;
this.size = size;
}
}
嗯,好吧,他注入的是page和size,不是pageNumber和pageSize。前台传入page和size就行了。