Skip to content

Commit dec820d

Browse files
committed
DATACMNS-867 - Removed handling of null Pageables.
Pageable now exposes a dedicated null-object representing the absence of pagination so that all places that previously handled null values can now rather be more relaxed and assume that a non-null value is given.
1 parent 917c3e2 commit dec820d

File tree

5 files changed

+30
-21
lines changed

5 files changed

+30
-21
lines changed

src/main/java/org/springframework/data/domain/Pageable.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2008-2013 the original author or authors.
2+
* Copyright 2008-2017 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
1515
*/
1616
package org.springframework.data.domain;
1717

18+
import java.util.Optional;
19+
1820
import org.springframework.util.Assert;
1921

2022
/**
@@ -120,4 +122,13 @@ default Sort getSortOr(Sort sort) {
120122
* @return
121123
*/
122124
boolean hasPrevious();
125+
126+
/**
127+
* Returns an {@link Optional} so that it can easily be mapped on.
128+
*
129+
* @return
130+
*/
131+
default Optional<Pageable> toOptional() {
132+
return isUnpaged() ? Optional.empty() : Optional.of(this);
133+
}
123134
}

src/main/java/org/springframework/data/querydsl/QuerydslPredicateExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public interface QuerydslPredicateExecutor<T> {
8383
* {@link Page} is returned.
8484
*
8585
* @param predicate can be {@literal null}.
86-
* @param pageable can be {@literal null}.
86+
* @param pageable must not be {@literal null}.
8787
* @return a {@link Page} of entities matching the given {@link Predicate}.
8888
*/
8989
Page<T> findAll(Predicate predicate, Pageable pageable);

src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public class PageableHandlerMethodArgumentResolver implements PageableArgumentRe
5454
private static final int DEFAULT_MAX_PAGE_SIZE = 2000;
5555
static final Pageable DEFAULT_PAGE_REQUEST = PageRequest.of(0, 20);
5656

57-
private Optional<Pageable> fallbackPageable = Optional.of(DEFAULT_PAGE_REQUEST);
57+
private Pageable fallbackPageable = DEFAULT_PAGE_REQUEST;
5858
private SortArgumentResolver sortResolver;
5959
private String pageParameterName = DEFAULT_PAGE_PARAMETER;
6060
private String sizeParameterName = DEFAULT_SIZE_PARAMETER;
@@ -101,7 +101,7 @@ public PageableHandlerMethodArgumentResolver(SortArgumentResolver sortResolver)
101101
*
102102
* @param fallbackPageable the {@link Pageable} to be used as general fallback.
103103
*/
104-
public void setFallbackPageable(Optional<Pageable> fallbackPageable) {
104+
public void setFallbackPageable(Pageable fallbackPageable) {
105105

106106
Assert.notNull(fallbackPageable, "Fallback Pageable must not be null!");
107107

@@ -240,7 +240,7 @@ public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewCon
240240

241241
assertPageableUniqueness(methodParameter);
242242

243-
Optional<Pageable> defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter);
243+
Optional<Pageable> defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter).toOptional();
244244

245245
String pageString = webRequest.getParameter(getParameterNameToUse(pageParameterName, methodParameter));
246246
String pageSizeString = webRequest.getParameter(getParameterNameToUse(sizeParameterName, methodParameter));
@@ -252,8 +252,8 @@ public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewCon
252252
return null;
253253
}
254254

255-
int p = page.orElseGet(
256-
() -> defaultOrFallback.map(Pageable::getPageNumber).orElseThrow(IllegalStateException::new));
255+
int p = page
256+
.orElseGet(() -> defaultOrFallback.map(Pageable::getPageNumber).orElseThrow(IllegalStateException::new));
257257
int ps = pageSize
258258
.orElseGet(() -> defaultOrFallback.map(Pageable::getPageSize).orElseThrow(IllegalStateException::new));
259259

@@ -288,10 +288,10 @@ protected String getParameterNameToUse(String source, MethodParameter parameter)
288288
return builder.append(source).toString();
289289
}
290290

291-
private Optional<Pageable> getDefaultFromAnnotationOrFallback(MethodParameter methodParameter) {
291+
private Pageable getDefaultFromAnnotationOrFallback(MethodParameter methodParameter) {
292292

293293
if (methodParameter.hasParameterAnnotation(PageableDefault.class)) {
294-
return Optional.of(getDefaultPageRequestFrom(methodParameter));
294+
return getDefaultPageRequestFrom(methodParameter);
295295
}
296296

297297
return fallbackPageable;

src/test/java/org/springframework/data/web/PageableDefaultUnitTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ public void doesNotSupportNonPageable() {
6969

7070
@Test
7171
public void returnsDefaultIfNoRequestParametersAndNoDefault() throws Exception {
72-
assertSupportedAndResult(getParameterOfMethod("supportedMethod"), ReflectionTestUtils
73-
.invokeMethod(ReflectionTestUtils.getField(getResolver(), "fallbackPageable"), "get"));
72+
assertSupportedAndResult(getParameterOfMethod("supportedMethod"),
73+
(Pageable) ReflectionTestUtils.getField(getResolver(), "fallbackPageable"));
7474
}
7575

7676
@Test

src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import static org.assertj.core.api.Assertions.*;
1919
import static org.springframework.data.web.PageableHandlerMethodArgumentResolver.*;
2020

21-
import java.util.Optional;
22-
2321
import org.junit.Before;
2422
import org.junit.Test;
2523
import org.springframework.beans.factory.annotation.Qualifier;
@@ -140,20 +138,20 @@ public void sizeParamIsNotNumeric() throws Exception {
140138
}
141139

142140
@Test // DATACMNS-477
143-
public void returnsNullIfFallbackIsNullAndNoParametersGiven() throws Exception {
141+
public void returnsNullIfFallbackIsUnpagedAndNoParametersGiven() throws Exception {
144142

145143
PageableHandlerMethodArgumentResolver resolver = getResolver();
146-
resolver.setFallbackPageable(Optional.empty());
144+
resolver.setFallbackPageable(Pageable.unpaged());
147145

148146
assertSupportedAndResult(supportedMethodParameter, null, new ServletWebRequest(new MockHttpServletRequest()),
149147
resolver);
150148
}
151149

152150
@Test // DATACMNS-477
153-
public void returnsNullIfFallbackIsNullAndOnlyPageIsGiven() throws Exception {
151+
public void returnsNullIfFallbackIsUnpagedAndOnlyPageIsGiven() throws Exception {
154152

155153
PageableHandlerMethodArgumentResolver resolver = getResolver();
156-
resolver.setFallbackPageable(Optional.empty());
154+
resolver.setFallbackPageable(Pageable.unpaged());
157155

158156
MockHttpServletRequest request = new MockHttpServletRequest();
159157
request.addParameter("page", "20");
@@ -162,10 +160,10 @@ public void returnsNullIfFallbackIsNullAndOnlyPageIsGiven() throws Exception {
162160
}
163161

164162
@Test // DATACMNS-477
165-
public void returnsNullIfFallbackIsNullAndOnlySizeIsGiven() throws Exception {
163+
public void returnsNullIfFallbackIsUnpagedAndOnlySizeIsGiven() throws Exception {
166164

167165
PageableHandlerMethodArgumentResolver resolver = getResolver();
168-
resolver.setFallbackPageable(Optional.empty());
166+
resolver.setFallbackPageable(Pageable.unpaged());
169167

170168
MockHttpServletRequest request = new MockHttpServletRequest();
171169
request.addParameter("size", "10");
@@ -191,7 +189,7 @@ public void considersOneIndexedParametersSetting() {
191189
public void usesNullSortIfNoDefaultIsConfiguredAndPageAndSizeAreGiven() {
192190

193191
PageableHandlerMethodArgumentResolver resolver = getResolver();
194-
resolver.setFallbackPageable(Optional.empty());
192+
resolver.setFallbackPageable(Pageable.unpaged());
195193

196194
MockHttpServletRequest request = new MockHttpServletRequest();
197195
request.addParameter("page", "0");
@@ -236,7 +234,7 @@ public void returnsCorrectPageSizeForOneIndexParameters() {
236234
public void detectsFallbackPageableIfNullOneIsConfigured() {
237235

238236
PageableHandlerMethodArgumentResolver resolver = getResolver();
239-
resolver.setFallbackPageable(Optional.empty());
237+
resolver.setFallbackPageable(Pageable.unpaged());
240238

241239
assertThat(resolver.isFallbackPageable(null)).isFalse();
242240
assertThat(resolver.isFallbackPageable(PageRequest.of(0, 10))).isFalse();

0 commit comments

Comments
 (0)