Use Pageable.unpaged(sort) for sorted unpaged pageable.

The (Reactive)PageableHandlerMethodArgumentResolver now falls back to a unpaged Pageable instance with a resolved sort if the the resolved Pageable is unpaged.

Fixes: GH-3094
Original pull request: GH-2865
This commit is contained in:
Yanming Zhou
2023-06-18 16:09:27 +08:00
committed by Oliver Drotbohm
parent 2c1f06c6eb
commit 7ecdbdf3d8
4 changed files with 73 additions and 5 deletions

View File

@@ -33,6 +33,7 @@ import org.springframework.web.method.support.ModelAndViewContainer;
* @author Nick Williams
* @author Mark Paluch
* @author Christoph Strobl
* @author Yanming Zhou
* @since 1.6
*/
public class PageableHandlerMethodArgumentResolver extends PageableHandlerMethodArgumentResolverSupport
@@ -83,7 +84,12 @@ public class PageableHandlerMethodArgumentResolver extends PageableHandlerMethod
Pageable pageable = getPageable(methodParameter, page, pageSize);
if (sort.isSorted()) {
return PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort);
if (pageable.isPaged()) {
pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort);
}
else {
pageable = Pageable.unpaged(sort);
}
}
return pageable;

View File

@@ -33,6 +33,7 @@ import org.springframework.web.server.ServerWebExchange;
*
* @since 2.2
* @author Mark Paluch
* @author Yanming Zhou
*/
public class ReactivePageableHandlerMethodArgumentResolver extends PageableHandlerMethodArgumentResolverSupport
implements SyncHandlerMethodArgumentResolver {
@@ -75,9 +76,17 @@ public class ReactivePageableHandlerMethodArgumentResolver extends PageableHandl
String pageSize = queryParams.getFirst(getParameterNameToUse(getSizeParameterName(), parameter));
Sort sort = sortResolver.resolveArgumentValue(parameter, bindingContext, exchange);
Pageable pageable = getPageable(parameter, page, pageSize);
return sort.isSorted() ? PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort) : pageable;
if (sort.isSorted()) {
if (pageable.isPaged()) {
pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort);
}
else {
pageable = Pageable.unpaged(sort);
}
}
return pageable;
}
}