Browse Source

Properly render sort variable variable as composite.

HateoasSortHandlerMethodArgumentResolver now renders the sort template variable as composite to properly indicate that it can be submitted multiple times.

Fixes GH-2531.
Original pull request GH-2945.
pull/2998/head
Julien Béti 2 years ago committed by Oliver Drotbohm
parent
commit
6e22ffd103
No known key found for this signature in database
GPG Key ID: C25FBFA0DA493A1D
  1. 3
      src/main/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolver.java
  2. 15
      src/test/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolverUnitTests.java
  3. 5
      src/test/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolverUnitTests.java

3
src/main/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolver.java

@ -35,6 +35,7 @@ import org.springframework.web.util.UriComponentsBuilder;
* @author Oliver Gierke * @author Oliver Gierke
* @author Thomas Darimont * @author Thomas Darimont
* @author Nick Williams * @author Nick Williams
* @author Julien Béti
*/ */
public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolver public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolver
implements UriComponentsContributor { implements UriComponentsContributor {
@ -58,7 +59,7 @@ public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodA
String description = String.format("pagination.%s.description", sortParameter); String description = String.format("pagination.%s.description", sortParameter);
TemplateVariable.VariableType type = append ? REQUEST_PARAM_CONTINUED : REQUEST_PARAM; TemplateVariable.VariableType type = append ? REQUEST_PARAM_CONTINUED : REQUEST_PARAM;
return new TemplateVariables(new TemplateVariable(sortParameter, type, description)); return new TemplateVariables(new TemplateVariable(sortParameter, type, description).composite());
} }
@Override @Override

15
src/test/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolverUnitTests.java

@ -28,6 +28,7 @@ import org.springframework.web.util.UriComponentsBuilder;
* Unit tests for {@link HateoasPageableHandlerMethodArgumentResolver}. * Unit tests for {@link HateoasPageableHandlerMethodArgumentResolver}.
* *
* @author Oliver Gierke * @author Oliver Gierke
* @author Julien Béti
*/ */
class HateoasPageableHandlerMethodArgumentResolverUnitTests class HateoasPageableHandlerMethodArgumentResolverUnitTests
extends PageableHandlerMethodArgumentResolverUnitTests { extends PageableHandlerMethodArgumentResolverUnitTests {
@ -66,18 +67,18 @@ class HateoasPageableHandlerMethodArgumentResolverUnitTests
assertUriStringFor(PageRequest.of(0, 200), "page=0&size=100"); assertUriStringFor(PageRequest.of(0, 200), "page=0&size=100");
} }
@Test // DATACMNS-418 @Test // DATACMNS-418, GH-2531
void appendsTemplateVariablesCorrectly() { void appendsTemplateVariablesCorrectly() {
assertTemplateEnrichment("/foo", "{?page,size,sort}"); assertTemplateEnrichment("/foo", "{?page,size,sort*}");
assertTemplateEnrichment("/foo?bar=1", "{&page,size,sort}"); assertTemplateEnrichment("/foo?bar=1", "{&page,size,sort*}");
assertTemplateEnrichment("/foo?page=1", "{&size,sort}"); assertTemplateEnrichment("/foo?page=1", "{&size,sort*}");
assertTemplateEnrichment("/foo?page=1&size=10", "{&sort}"); assertTemplateEnrichment("/foo?page=1&size=10", "{&sort*}");
assertTemplateEnrichment("/foo?page=1&sort=foo,asc", "{&size}"); assertTemplateEnrichment("/foo?page=1&sort=foo,asc", "{&size}");
assertTemplateEnrichment("/foo?page=1&size=10&sort=foo,asc", ""); assertTemplateEnrichment("/foo?page=1&size=10&sort=foo,asc", "");
} }
@Test // DATACMNS-418 @Test // DATACMNS-418, GH-2531
void returnsCustomizedTemplateVariables() { void returnsCustomizedTemplateVariables() {
var uriComponents = UriComponentsBuilder.fromPath("/foo").build(); var uriComponents = UriComponentsBuilder.fromPath("/foo").build();
@ -86,7 +87,7 @@ class HateoasPageableHandlerMethodArgumentResolverUnitTests
resolver.setPageParameterName("foo"); resolver.setPageParameterName("foo");
var variables = resolver.getPaginationTemplateVariables(null, uriComponents).toString(); var variables = resolver.getPaginationTemplateVariables(null, uriComponents).toString();
assertThat(variables).isEqualTo("{?foo,size,sort}"); assertThat(variables).isEqualTo("{?foo,size,sort*}");
} }
@Test // DATACMNS-563 @Test // DATACMNS-563

5
src/test/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolverUnitTests.java

@ -28,6 +28,7 @@ import org.springframework.web.util.UriComponentsBuilder;
* Unit tests for {@link HateoasSortHandlerMethodArgumentResolver} * Unit tests for {@link HateoasSortHandlerMethodArgumentResolver}
* *
* @author Oliver Gierke * @author Oliver Gierke
* @author Julien Béti
*/ */
class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMethodArgumentResolverUnitTests { class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMethodArgumentResolverUnitTests {
@ -46,13 +47,13 @@ class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMetho
assertUriStringFor(SORT, "/?sort=firstname,lastname,desc", "/?sort=foo,asc"); assertUriStringFor(SORT, "/?sort=firstname,lastname,desc", "/?sort=foo,asc");
} }
@Test // DATACMNS-418 @Test // DATACMNS-418, GH-2531
void returnCorrectTemplateVariables() { void returnCorrectTemplateVariables() {
var uriComponents = UriComponentsBuilder.fromPath("/").build(); var uriComponents = UriComponentsBuilder.fromPath("/").build();
var resolver = new HateoasSortHandlerMethodArgumentResolver(); var resolver = new HateoasSortHandlerMethodArgumentResolver();
assertThat(resolver.getSortTemplateVariables(null, uriComponents).toString()).isEqualTo("{?sort}"); assertThat(resolver.getSortTemplateVariables(null, uriComponents).toString()).isEqualTo("{?sort*}");
} }
private void assertUriStringFor(Sort sort, String expected) throws Exception { private void assertUriStringFor(Sort sort, String expected) throws Exception {

Loading…
Cancel
Save