DATACMNS-377 - Prevent page sizes less than one.

PageRequest now actively prevents page sizes less than one. PageableHandlerMethodArgumentResolver falls back to default page size if it detects a page size less than one. It also rejects invalid default configuration using @PageableDefault.
This commit is contained in:
Oliver Gierke
2013-10-07 10:47:25 +02:00
parent 59e9af4950
commit 93b2d39cf1
4 changed files with 67 additions and 8 deletions

View File

@@ -15,6 +15,7 @@
*/
package org.springframework.data.web;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.MethodParameter;
@@ -33,6 +34,13 @@ import org.springframework.mock.web.MockHttpServletRequest;
*/
public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnitTests {
MethodParameter supportedMethodParameter;
@Before
public void setUp() throws Exception {
this.supportedMethodParameter = new MethodParameter(Sample.class.getMethod("supportedMethod", Pageable.class), 0);
}
/**
* @see DATACMNS-335
*/
@@ -44,9 +52,7 @@ public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefa
request.addParameter("page", "0");
request.addParameter("size", "200");
MethodParameter parameter = new MethodParameter(Sample.class.getMethod("supportedMethod", Pageable.class), 0);
assertSupportedAndResult(parameter, new PageRequest(0, 100), request);
assertSupportedAndResult(supportedMethodParameter, new PageRequest(0, 100), request);
}
@Test(expected = IllegalArgumentException.class)
@@ -81,6 +87,34 @@ public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefa
assertSupportedAndResult(parameter, new PageRequest(2, 10), request);
}
/**
* @see DATACMNS-377
*/
@Test
public void usesDefaultPageSizeIfRequestPageSizeIsLessThanOne() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("page", "0");
request.addParameter("size", "0");
assertSupportedAndResult(supportedMethodParameter, PageableHandlerMethodArgumentResolver.DEFAULT_PAGE_REQUEST,
request);
}
/**
* @see DATACMNS-377
*/
@Test
public void rejectsInvalidCustomDefaultForPageSize() throws Exception {
MethodParameter parameter = new MethodParameter(Sample.class.getMethod("invalidDefaultPageSize", Pageable.class), 0);
exception.expect(IllegalStateException.class);
exception.expectMessage("invalidDefaultPageSize");
assertSupportedAndResult(parameter, PageableHandlerMethodArgumentResolver.DEFAULT_PAGE_REQUEST);
}
@Override
protected PageableHandlerMethodArgumentResolver getResolver() {
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
@@ -99,6 +133,8 @@ public class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefa
void unsupportedMethod(String string);
void invalidDefaultPageSize(@PageableDefault(size = 0) Pageable pageable);
void simpleDefault(@PageableDefault(size = PAGE_SIZE, page = PAGE_NUMBER) Pageable pageable);
void simpleDefaultWithSort(@PageableDefault(size = PAGE_SIZE, page = PAGE_NUMBER,