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.
This commit is contained in:
Oliver Gierke
2017-03-15 16:57:33 +01:00
parent 917c3e2889
commit dec820d6c2
5 changed files with 30 additions and 21 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2008-2013 the original author or authors.
* Copyright 2008-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
*/
package org.springframework.data.domain;
import java.util.Optional;
import org.springframework.util.Assert;
/**
@@ -120,4 +122,13 @@ public interface Pageable {
* @return
*/
boolean hasPrevious();
/**
* Returns an {@link Optional} so that it can easily be mapped on.
*
* @return
*/
default Optional<Pageable> toOptional() {
return isUnpaged() ? Optional.empty() : Optional.of(this);
}
}

View File

@@ -83,7 +83,7 @@ public interface QuerydslPredicateExecutor<T> {
* {@link Page} is returned.
*
* @param predicate can be {@literal null}.
* @param pageable can be {@literal null}.
* @param pageable must not be {@literal null}.
* @return a {@link Page} of entities matching the given {@link Predicate}.
*/
Page<T> findAll(Predicate predicate, Pageable pageable);

View File

@@ -54,7 +54,7 @@ public class PageableHandlerMethodArgumentResolver implements PageableArgumentRe
private static final int DEFAULT_MAX_PAGE_SIZE = 2000;
static final Pageable DEFAULT_PAGE_REQUEST = PageRequest.of(0, 20);
private Optional<Pageable> fallbackPageable = Optional.of(DEFAULT_PAGE_REQUEST);
private Pageable fallbackPageable = DEFAULT_PAGE_REQUEST;
private SortArgumentResolver sortResolver;
private String pageParameterName = DEFAULT_PAGE_PARAMETER;
private String sizeParameterName = DEFAULT_SIZE_PARAMETER;
@@ -101,7 +101,7 @@ public class PageableHandlerMethodArgumentResolver implements PageableArgumentRe
*
* @param fallbackPageable the {@link Pageable} to be used as general fallback.
*/
public void setFallbackPageable(Optional<Pageable> fallbackPageable) {
public void setFallbackPageable(Pageable fallbackPageable) {
Assert.notNull(fallbackPageable, "Fallback Pageable must not be null!");
@@ -240,7 +240,7 @@ public class PageableHandlerMethodArgumentResolver implements PageableArgumentRe
assertPageableUniqueness(methodParameter);
Optional<Pageable> defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter);
Optional<Pageable> defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter).toOptional();
String pageString = webRequest.getParameter(getParameterNameToUse(pageParameterName, methodParameter));
String pageSizeString = webRequest.getParameter(getParameterNameToUse(sizeParameterName, methodParameter));
@@ -252,8 +252,8 @@ public class PageableHandlerMethodArgumentResolver implements PageableArgumentRe
return null;
}
int p = page.orElseGet(
() -> defaultOrFallback.map(Pageable::getPageNumber).orElseThrow(IllegalStateException::new));
int p = page
.orElseGet(() -> defaultOrFallback.map(Pageable::getPageNumber).orElseThrow(IllegalStateException::new));
int ps = pageSize
.orElseGet(() -> defaultOrFallback.map(Pageable::getPageSize).orElseThrow(IllegalStateException::new));
@@ -288,10 +288,10 @@ public class PageableHandlerMethodArgumentResolver implements PageableArgumentRe
return builder.append(source).toString();
}
private Optional<Pageable> getDefaultFromAnnotationOrFallback(MethodParameter methodParameter) {
private Pageable getDefaultFromAnnotationOrFallback(MethodParameter methodParameter) {
if (methodParameter.hasParameterAnnotation(PageableDefault.class)) {
return Optional.of(getDefaultPageRequestFrom(methodParameter));
return getDefaultPageRequestFrom(methodParameter);
}
return fallbackPageable;