Browse Source

DATACMNS-477 - PageableHandlerMethodArgumentResolver now handles null default.

We now explicitly check for the configured default being null and subsequently return that value if we don't have both the page and the size parameter configured.
pull/77/head
Oliver Gierke 12 years ago
parent
commit
f33f57b887
  1. 10
      src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java
  2. 10
      src/test/java/org/springframework/data/web/PageableDefaultUnitTests.java
  3. 48
      src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java

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

@ -82,7 +82,9 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum @@ -82,7 +82,9 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum
* resolved.
* <p>
* If you set this to {@literal null}, be aware that you controller methods will get {@literal null} handed into them
* in case no {@link Pageable} data can be found in the request.
* in case no {@link Pageable} data can be found in the request. Note, that doing so will require you supply bot the
* page <em>and</em> the size parameter with the requests as there will be no default for any of the parameters
* available.
*
* @param fallbackPageable the {@link Pageable} to be used as general fallback.
*/
@ -216,6 +218,12 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum @@ -216,6 +218,12 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum
String pageString = webRequest.getParameter(getParameterNameToUse(pageParameterName, methodParameter));
String pageSizeString = webRequest.getParameter(getParameterNameToUse(sizeParameterName, methodParameter));
boolean pageAndSizeGiven = StringUtils.hasText(pageString) && StringUtils.hasText(pageSizeString);
if (!pageAndSizeGiven && defaultOrFallback == null) {
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)

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

@ -51,7 +51,8 @@ public abstract class PageableDefaultUnitTests { @@ -51,7 +51,8 @@ public abstract class PageableDefaultUnitTests {
static final AbstractPageRequest REFERENCE_WITHOUT_SORT = new PageRequest(PAGE_NUMBER, PAGE_SIZE);
static final AbstractPageRequest REFERENCE_WITH_SORT = new PageRequest(PAGE_NUMBER, PAGE_SIZE, SORT);
static final AbstractPageRequest REFERENCE_WITH_SORT_FIELDS = new PageRequest(PAGE_NUMBER, PAGE_SIZE, new Sort(SORT_FIELDS));
static final AbstractPageRequest REFERENCE_WITH_SORT_FIELDS = new PageRequest(PAGE_NUMBER, PAGE_SIZE, new Sort(
SORT_FIELDS));
@Rule public ExpectedException exception = ExpectedException.none();
@ -140,7 +141,12 @@ public abstract class PageableDefaultUnitTests { @@ -140,7 +141,12 @@ public abstract class PageableDefaultUnitTests {
protected void assertSupportedAndResult(MethodParameter parameter, Pageable pageable, NativeWebRequest request)
throws Exception {
HandlerMethodArgumentResolver resolver = getResolver();
assertSupportedAndResult(parameter, pageable, request, getResolver());
}
protected void assertSupportedAndResult(MethodParameter parameter, Pageable pageable, NativeWebRequest request,
HandlerMethodArgumentResolver resolver) throws Exception {
assertThat(resolver.supportsParameter(parameter), is(true));
assertThat(resolver.resolveArgument(parameter, null, request, null), is((Object) pageable));
}

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

@ -15,6 +15,8 @@ @@ -15,6 +15,8 @@
*/
package org.springframework.data.web;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.springframework.data.web.PageableHandlerMethodArgumentResolver.*;
import org.junit.Before;
@ -26,6 +28,7 @@ import org.springframework.data.domain.Pageable; @@ -26,6 +28,7 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.web.SortDefault.SortDefaults;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.web.context.request.ServletWebRequest;
/**
* Unit tests for {@link PageableHandlerMethodArgumentResolver}. Pulls in defaulting tests from
@ -152,6 +155,51 @@ public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefa @@ -152,6 +155,51 @@ public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefa
assertSupportedAndResult(supportedMethodParameter, DEFAULT_PAGE_REQUEST, request);
}
/**
* @see DATACMNS-477
*/
@Test
public void returnsNullIfFallbackIsNullAndNoParametersGiven() throws Exception {
PageableHandlerMethodArgumentResolver resolver = getResolver();
resolver.setFallbackPageable(null);
assertSupportedAndResult(supportedMethodParameter, null, new ServletWebRequest(new MockHttpServletRequest()),
resolver);
}
/**
* @see DATACMNS-477
*/
@Test
public void returnsNullIfFallbackIsNullAndOnlyPageIsGiven() throws Exception {
PageableHandlerMethodArgumentResolver resolver = getResolver();
resolver.setFallbackPageable(null);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("page", "20");
assertThat(resolver.resolveArgument(supportedMethodParameter, null, new ServletWebRequest(request), null),
is(nullValue()));
}
/**
* @see DATACMNS-477
*/
@Test
public void returnsNullIfFallbackIsNullAndOnlySizeIsGiven() throws Exception {
PageableHandlerMethodArgumentResolver resolver = getResolver();
resolver.setFallbackPageable(null);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("size", "10");
assertThat(resolver.resolveArgument(supportedMethodParameter, null, new ServletWebRequest(request), null),
is(nullValue()));
}
@Override
protected PageableHandlerMethodArgumentResolver getResolver() {
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();

Loading…
Cancel
Save