Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.springframework.data.domain.Sort;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
Expand Down Expand Up @@ -233,19 +234,26 @@ public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewCon

String pageString = webRequest.getParameter(getParameterNameToUse(pageParameterName, methodParameter));
String pageSizeString = webRequest.getParameter(getParameterNameToUse(sizeParameterName, methodParameter));

int page = StringUtils.hasText(pageString) ? Integer.parseInt(pageString) - (oneIndexedParameters ? 1 : 0)
: defaultOrFallback.getPageNumber();
int pageSize = StringUtils.hasText(pageSizeString) ? Integer.parseInt(pageSizeString) : defaultOrFallback
.getPageSize();

// Limit lower bound
pageSize = pageSize < 1 ? defaultOrFallback.getPageSize() : pageSize;
// Limit upper bound
pageSize = pageSize > maxPageSize ? maxPageSize : pageSize;

Sort sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
return new PageRequest(page, pageSize, sort == null ? defaultOrFallback.getSort() : sort);

Pageable pageable = null;
try {
int page = StringUtils.hasText(pageString) ? Integer.parseInt(pageString) - (oneIndexedParameters ? 1 : 0)
: defaultOrFallback.getPageNumber();
int pageSize = StringUtils.hasText(pageSizeString) ? Integer.parseInt(pageSizeString) : defaultOrFallback
.getPageSize();

// Limit lower bound
pageSize = pageSize < 1 ? defaultOrFallback.getPageSize() : pageSize;
// Limit upper bound
pageSize = pageSize > maxPageSize ? maxPageSize : pageSize;

Sort sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
pageable = new PageRequest(page, pageSize, sort == null ? defaultOrFallback.getSort() : sort);

} catch (IllegalArgumentException e) {
throw new ServletRequestBindingException(e.getMessage(), e);
}
return pageable;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.web.SortDefault.SortDefaults;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.web.bind.ServletRequestBindingException;

/**
* Unit tests for {@link PageableHandlerMethodArgumentResolver}. Pulls in defaulting tests from
Expand Down Expand Up @@ -115,6 +116,70 @@ public void rejectsInvalidCustomDefaultForPageSize() throws Exception {
assertSupportedAndResult(parameter, PageableHandlerMethodArgumentResolver.DEFAULT_PAGE_REQUEST);
}

@Test(expected = ServletRequestBindingException.class)
public void pageParamIsNegative() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("page", "-1");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Test(expected = ServletRequestBindingException.class)
public void pageParamIsNotNumeric() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("page", "a");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Test(expected = ServletRequestBindingException.class)
public void sizeParamIsNotNumeric() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("size", "a");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Test(expected = ServletRequestBindingException.class)
public void sortParamIsEmpty() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("sort", "");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Test(expected = ServletRequestBindingException.class)
public void sortParamIsInvalidProperty() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("sort", ",DESC");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Test(expected = ServletRequestBindingException.class)
public void sortParamIsInvalidPropertyWhenMultiProperty() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("sort", "property1,,DESC");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Test(expected = ServletRequestBindingException.class)
public void sortParamIsEmptyWhenMultiParams() throws Exception {

MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("sort", "property,DESC");
request.addParameter("sort", "");

assertSupportedAndResult(supportedMethodParameter, null, request);
}

@Override
protected PageableHandlerMethodArgumentResolver getResolver() {
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
Expand Down