diff --git a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java index 7a5f98e52..3fe91dcd8 100644 --- a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java +++ b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java @@ -235,9 +235,9 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum return null; } - int page = StringUtils.hasText(pageString) ? parseAndApplyBoundaries(pageString, 0, Integer.MAX_VALUE) - - (oneIndexedParameters ? 1 : 0) : defaultOrFallback.getPageNumber(); - int pageSize = StringUtils.hasText(pageSizeString) ? parseAndApplyBoundaries(pageSizeString, 0, maxPageSize) + int page = StringUtils.hasText(pageString) ? parseAndApplyBoundaries(pageString, Integer.MAX_VALUE) + : defaultOrFallback.getPageNumber(); + int pageSize = StringUtils.hasText(pageSizeString) ? parseAndApplyBoundaries(pageSizeString, maxPageSize) : defaultOrFallback.getPageSize(); // Limit lower bound @@ -306,17 +306,16 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum * boundary if the {@link String} cannot be parsed. * * @param parameter - * @param lower * @param upper * @return */ - private static int parseAndApplyBoundaries(String parameter, int lower, int upper) { + private int parseAndApplyBoundaries(String parameter, int upper) { try { - int parsed = Integer.parseInt(parameter); - return parsed < lower ? lower : parsed > upper ? upper : parsed; + int parsed = Integer.parseInt(parameter) - (oneIndexedParameters ? 1 : 0); + return parsed < 0 ? 0 : parsed > upper ? upper : parsed; } catch (NumberFormatException e) { - return lower; + return 0; } } } diff --git a/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java b/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java index 2fa3b0715..d29e5b23b 100644 --- a/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java +++ b/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 the original author or authors. + * Copyright 2013-2015 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. @@ -236,6 +236,23 @@ public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefa assertThat(result.getSort(), is(nullValue())); } + /** + * @see DATACMNS-692 + */ + @Test + public void oneIndexedParametersDefaultsIndexOutOfRange() { + + PageableHandlerMethodArgumentResolver resolver = getResolver(); + resolver.setOneIndexedParameters(true); + + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addParameter("page", "0"); + + Pageable result = resolver.resolveArgument(supportedMethodParameter, null, new ServletWebRequest(request), null); + + assertThat(result.getPageNumber(), is(0)); + } + @Override protected PageableHandlerMethodArgumentResolver getResolver() { PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();