DATACMNS-408 - Handle invalid pagination and sorting parameters gracefully.
The PageableHandlerMethodArgumentResolver and SortHandlerMethodArgumentResolver now transparently ignore invalid values provided for page number, size and sort. We fall back to ignore the invalid values (for sort) and fall back to the defaults where appropriate (page number and size). Used and adapted test cases from pull request #48.
This commit is contained in:
@@ -234,10 +234,10 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum
|
||||
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();
|
||||
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)
|
||||
: defaultOrFallback.getPageSize();
|
||||
|
||||
// Limit lower bound
|
||||
pageSize = pageSize < 1 ? defaultOrFallback.getPageSize() : pageSize;
|
||||
@@ -301,4 +301,23 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum
|
||||
|
||||
return new PageRequest(defaultPageNumber, defaultPageSize, defaults.direction(), defaults.sort());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to parse the given {@link String} into an integer and applies the given boundaries. Will return the lower
|
||||
* 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) {
|
||||
|
||||
try {
|
||||
int parsed = Integer.parseInt(parameter);
|
||||
return parsed < lower ? lower : parsed > upper ? upper : parsed;
|
||||
} catch (NumberFormatException e) {
|
||||
return lower;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,7 +251,13 @@ public class SortHandlerMethodArgumentResolver implements HandlerMethodArgumentR
|
||||
continue;
|
||||
}
|
||||
|
||||
allOrders.add(new Order(direction, elements[i]));
|
||||
String property = elements[i];
|
||||
|
||||
if (!StringUtils.hasText(property)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
allOrders.add(new Order(direction, property));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user