diff --git a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java index e68fadb53..e73d24bd2 100644 --- a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java +++ b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java @@ -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()); } diff --git a/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTest.java b/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTest.java index c0f313976..ca15e4398 100644 --- a/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTest.java +++ b/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTest.java @@ -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 params = builder.build().getQueryParams(); + + List page = params.get("page"); + assertThat(page.size(), is(1)); + assertThat(page.get(0), is("1")); + + List size = params.get("size"); + assertThat(size.size(), is(1)); + assertThat(size.get(0), is("20")); + } + @Override protected PageableHandlerMethodArgumentResolver getResolver() { PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();