DATACMNS-343 - PageableHandlerMethodArgumentResolver replaces pagination parameters now.
PageableHandlerMethodArgumentResolver now uses replaceQueryParam(…) to make sure the query parameters necessary for pagination don't accidentally get added multiple times.
This commit is contained in:
@@ -188,8 +188,9 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum
|
||||
|
||||
int pageNumber = pageable.getPageNumber();
|
||||
|
||||
builder.queryParam(pagePropertyName, oneIndexedParameters ? pageNumber + 1 : pageNumber);
|
||||
builder.queryParam(sizePropertyName, pageable.getPageSize() <= maxPageSize ? pageable.getPageSize() : maxPageSize);
|
||||
builder.replaceQueryParam(pagePropertyName, oneIndexedParameters ? pageNumber + 1 : pageNumber);
|
||||
builder.replaceQueryParam(sizePropertyName, pageable.getPageSize() <= maxPageSize ? pageable.getPageSize()
|
||||
: maxPageSize);
|
||||
|
||||
sortResolver.enhance(builder, parameter, pageable.getSort());
|
||||
}
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
*/
|
||||
package org.springframework.data.web;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.MethodParameter;
|
||||
@@ -22,8 +27,11 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.web.SortDefault.SortDefaults;
|
||||
import org.springframework.hateoas.mvc.UriComponentsContributor;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.context.request.ServletWebRequest;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link PageableHandlerMethodArgumentResolver}. Pulls in defaulting tests from
|
||||
@@ -62,6 +70,28 @@ public class PageableHandlerMethodArgumentResolverUnitTest extends PageableDefau
|
||||
assertSupportedAndResult(parameter, new PageRequest(0, 100), new ServletWebRequest(request));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATACMNS-343
|
||||
*/
|
||||
@Test
|
||||
public void replacesExistingPaginationInformation() throws Exception {
|
||||
|
||||
MethodParameter parameter = new MethodParameter(Sample.class.getMethod("supportedMethod", Pageable.class), 0);
|
||||
UriComponentsContributor resolver = new PageableHandlerMethodArgumentResolver();
|
||||
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080?page=0&size=10");
|
||||
resolver.enhance(builder, parameter, new PageRequest(1, 20));
|
||||
|
||||
MultiValueMap<String, String> params = builder.build().getQueryParams();
|
||||
|
||||
List<String> page = params.get("page");
|
||||
assertThat(page.size(), is(1));
|
||||
assertThat(page.get(0), is("1"));
|
||||
|
||||
List<String> size = params.get("size");
|
||||
assertThat(size.size(), is(1));
|
||||
assertThat(size.get(0), is("20"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PageableHandlerMethodArgumentResolver getResolver() {
|
||||
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
|
||||
|
||||
Reference in New Issue
Block a user