diff --git a/src/main/java/org/springframework/data/support/PageableExecutionUtils.java b/src/main/java/org/springframework/data/support/PageableExecutionUtils.java index d30720f304..ca17c66836 100644 --- a/src/main/java/org/springframework/data/support/PageableExecutionUtils.java +++ b/src/main/java/org/springframework/data/support/PageableExecutionUtils.java @@ -54,19 +54,30 @@ public static Page getPage(List content, Pageable pageable, LongSuppli Assert.notNull(pageable, "Pageable must not be null"); Assert.notNull(totalSupplier, "TotalSupplier must not be null"); - if (pageable.isUnpaged() || pageable.getOffset() == 0) { - - if (pageable.isUnpaged() || pageable.getPageSize() > content.size()) { - return new PageImpl<>(content, pageable, content.size()); - } + if (pageable.isUnpaged()) { + return new PageImpl<>(content, pageable, content.size()); + } - return new PageImpl<>(content, pageable, totalSupplier.getAsLong()); + if (isFirstPage(pageable) && isPartialPage(content, pageable)) { + return new PageImpl<>(content, pageable, content.size()); } - if (content.size() != 0 && pageable.getPageSize() > content.size()) { + if (isSubsequentPage(pageable) && !content.isEmpty() && isPartialPage(content, pageable)) { return new PageImpl<>(content, pageable, pageable.getOffset() + content.size()); } return new PageImpl<>(content, pageable, totalSupplier.getAsLong()); } + + private static boolean isPartialPage(List content, Pageable pageable) { + return pageable.getPageSize() > content.size(); + } + + private static boolean isFirstPage(Pageable pageable) { + return pageable.getOffset() == 0; + } + + private static boolean isSubsequentPage(Pageable pageable) { + return !isFirstPage(pageable); + } }