Browse Source

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.
pull/32/head
Oliver Gierke 13 years ago
parent
commit
8a02b4ad6e
  1. 5
      src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java
  2. 30
      src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTest.java

5
src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java

@ -188,8 +188,9 @@ public class PageableHandlerMethodArgumentResolver implements HandlerMethodArgum @@ -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());
}

30
src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTest.java

@ -15,6 +15,11 @@ @@ -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; @@ -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 @@ -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();

Loading…
Cancel
Save