Skip to content

Added a exception handling for when was specified the invalid value in the pagination parameter. #48

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
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