Skip to content

Commit 167b52f

Browse files
committed
DATACMNS-761 - Fixed page size detection for a PageableHandlerMethodArgumentResolver configured to one-indexed parameters.
1 parent bfc5a68 commit 167b52f

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013-2014 the original author or authors.
2+
* Copyright 2013-2015 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.
@@ -235,9 +235,9 @@ public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewCon
235235
return null;
236236
}
237237

238-
int page = StringUtils.hasText(pageString) ? parseAndApplyBoundaries(pageString, Integer.MAX_VALUE)
238+
int page = StringUtils.hasText(pageString) ? parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, true)
239239
: defaultOrFallback.getPageNumber();
240-
int pageSize = StringUtils.hasText(pageSizeString) ? parseAndApplyBoundaries(pageSizeString, maxPageSize)
240+
int pageSize = StringUtils.hasText(pageSizeString) ? parseAndApplyBoundaries(pageSizeString, maxPageSize, false)
241241
: defaultOrFallback.getPageSize();
242242

243243
// Limit lower bound
@@ -302,17 +302,18 @@ private static Pageable getDefaultPageRequestFrom(MethodParameter parameter) {
302302
}
303303

304304
/**
305-
* Tries to parse the given {@link String} into an integer and applies the given boundaries. Will return the lower
306-
* boundary if the {@link String} cannot be parsed.
305+
* Tries to parse the given {@link String} into an integer and applies the given boundaries. Will return 0 if the
306+
* {@link String} cannot be parsed.
307307
*
308-
* @param parameter
309-
* @param upper
308+
* @param parameter the parameter value.
309+
* @param upper the upper bound to be applied.
310+
* @param shiftIndex whether to shift the index if {@link #oneIndexedParameters} is set to true.
310311
* @return
311312
*/
312-
private int parseAndApplyBoundaries(String parameter, int upper) {
313+
private int parseAndApplyBoundaries(String parameter, int upper, boolean shiftIndex) {
313314

314315
try {
315-
int parsed = Integer.parseInt(parameter) - (oneIndexedParameters ? 1 : 0);
316+
int parsed = Integer.parseInt(parameter) - (oneIndexedParameters && shiftIndex ? 1 : 0);
316317
return parsed < 0 ? 0 : parsed > upper ? upper : parsed;
317318
} catch (NumberFormatException e) {
318319
return 0;

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,23 @@ public void oneIndexedParametersDefaultsIndexOutOfRange() {
253253
assertThat(result.getPageNumber(), is(0));
254254
}
255255

256+
/**
257+
* @see DATACMNS-761
258+
*/
259+
@Test
260+
public void returnsCorrectPageSizeForOneIndexParameters() {
261+
262+
PageableHandlerMethodArgumentResolver resolver = getResolver();
263+
resolver.setOneIndexedParameters(true);
264+
265+
MockHttpServletRequest request = new MockHttpServletRequest();
266+
request.addParameter("size", "10");
267+
268+
Pageable result = resolver.resolveArgument(supportedMethodParameter, null, new ServletWebRequest(request), null);
269+
270+
assertThat(result.getPageSize(), is(10));
271+
}
272+
256273
@Override
257274
protected PageableHandlerMethodArgumentResolver getResolver() {
258275
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();

0 commit comments

Comments
 (0)