From 24cf1fc7d5efc159251f440baf47e97ec52b9125 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 29 Oct 2024 09:25:16 +0100 Subject: [PATCH] Polishing. Refine Javadoc and update ReactivePageableHandlerMethodArgumentResolver. Fix nullability annotations. See #3188 --- .../PageableHandlerMethodArgumentResolver.java | 9 +++++++-- ...eableHandlerMethodArgumentResolverSupport.java | 15 +++++++++------ ...tivePageableHandlerMethodArgumentResolver.java | 9 ++++++--- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java index 246903ae5..49c4460c2 100644 --- a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java +++ b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java @@ -26,7 +26,11 @@ import org.springframework.web.method.support.ModelAndViewContainer; /** * Extracts paging information from web requests and thus allows injecting {@link Pageable} instances into controller - * methods. Request properties to be parsed can be configured. + * methods. Request properties to be parsed can be configured defaulting to {@code page} for the page number and + * {@code size} for the page size. + *

+ * Parameters can be {@link #setPrefix(String) prefixed} to disambiguate from other parameters in the request if + * necessary. * * @author Oliver Gierke * @author Nick Williams @@ -39,7 +43,8 @@ public class PageableHandlerMethodArgumentResolver extends PageableHandlerMethod implements PageableArgumentResolver { private static final SortHandlerMethodArgumentResolver DEFAULT_SORT_RESOLVER = new SortHandlerMethodArgumentResolver(); - private SortArgumentResolver sortResolver; + + private final SortArgumentResolver sortResolver; /** * Constructs an instance of this resolved with a default {@link SortHandlerMethodArgumentResolver}. diff --git a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java index ea423f93f..5b085e036 100644 --- a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java +++ b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java @@ -34,7 +34,10 @@ import org.springframework.util.StringUtils; /** * Base class providing methods for handler method argument resolvers to create paging information from web requests and * thus allows injecting {@link Pageable} instances into controller methods. Request properties to be parsed can be - * configured. + * configured defaulting to {@code page} for the page number and {@code size} for the page size. + *

+ * Parameters can be {@link #setPrefix(String) prefixed} to disambiguate from other parameters in the request if + * necessary. * * @author Mark Paluch * @author Vedran Pavic @@ -153,7 +156,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport { * * @param prefix the prefix to be used or {@literal null} to reset to the default. */ - public void setPrefix(String prefix) { + public void setPrefix(@Nullable String prefix) { this.prefix = prefix == null ? DEFAULT_PREFIX : prefix; } @@ -163,7 +166,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport { * * @param qualifierDelimiter the delimiter to be used or {@literal null} to reset to the default. */ - public void setQualifierDelimiter(String qualifierDelimiter) { + public void setQualifierDelimiter(@Nullable String qualifierDelimiter) { this.qualifierDelimiter = qualifierDelimiter == null ? DEFAULT_QUALIFIER_DELIMITER : qualifierDelimiter; } @@ -198,7 +201,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport { Optional page = parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, true); Optional pageSize = parseAndApplyBoundaries(pageSizeString, maxPageSize, false); - if (!(page.isPresent() && pageSize.isPresent()) && !defaultOrFallback.isPresent()) { + if (!(page.isPresent() && pageSize.isPresent()) && defaultOrFallback.isEmpty()) { return Pageable.unpaged(); } @@ -210,7 +213,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport { // Limit lower bound ps = ps < 1 ? defaultOrFallback.map(Pageable::getPageSize).orElseThrow(IllegalStateException::new) : ps; // Limit upper bound - ps = ps > maxPageSize ? maxPageSize : ps; + ps = Math.min(ps, maxPageSize); return PageRequest.of(p, ps, defaultOrFallback.map(Pageable::getSort).orElseGet(Sort::unsorted)); } @@ -286,7 +289,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport { try { int parsed = Integer.parseInt(parameter) - (oneIndexedParameters && shiftIndex ? 1 : 0); - return Optional.of(parsed < 0 ? 0 : parsed > upper ? upper : parsed); + return Optional.of(parsed < 0 ? 0 : Math.min(parsed, upper)); } catch (NumberFormatException e) { return Optional.of(0); } diff --git a/src/main/java/org/springframework/data/web/ReactivePageableHandlerMethodArgumentResolver.java b/src/main/java/org/springframework/data/web/ReactivePageableHandlerMethodArgumentResolver.java index 438e83e0d..6f24737f4 100644 --- a/src/main/java/org/springframework/data/web/ReactivePageableHandlerMethodArgumentResolver.java +++ b/src/main/java/org/springframework/data/web/ReactivePageableHandlerMethodArgumentResolver.java @@ -28,8 +28,11 @@ import org.springframework.web.server.ServerWebExchange; /** * Extracts paging information from web requests and thus allows injecting {@link Pageable} instances into WebFlux - * controller methods. Request properties to be parsed can be configured. Default configuration uses request parameters - * beginning with {@link #DEFAULT_PAGE_PARAMETER}{@link #DEFAULT_QUALIFIER_DELIMITER}. + * controller methods. Request properties to be parsed can be configured defaulting to {@code page} for the page number + * and {@code size} for the page size. + *

+ * Parameters can be {@link #setPrefix(String) prefixed} to disambiguate from other parameters in the request if + * necessary. * * @since 2.2 * @author Mark Paluch @@ -40,7 +43,7 @@ public class ReactivePageableHandlerMethodArgumentResolver extends PageableHandl private static final ReactiveSortHandlerMethodArgumentResolver DEFAULT_SORT_RESOLVER = new ReactiveSortHandlerMethodArgumentResolver(); - private ReactiveSortHandlerMethodArgumentResolver sortResolver; + private final ReactiveSortHandlerMethodArgumentResolver sortResolver; /** * Constructs an instance of this resolved with a default {@link ReactiveSortHandlerMethodArgumentResolver}.