From 6e22ffd10313ff997e874f198a89fe915268b648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20B=C3=A9ti?= Date: Thu, 28 Sep 2023 10:48:13 +0200 Subject: [PATCH] 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. --- .../HateoasSortHandlerMethodArgumentResolver.java | 3 ++- ...bleHandlerMethodArgumentResolverUnitTests.java | 15 ++++++++------- ...ortHandlerMethodArgumentResolverUnitTests.java | 5 +++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolver.java b/src/main/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolver.java index 86a92c82e..1d1a18beb 100644 --- a/src/main/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolver.java +++ b/src/main/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolver.java @@ -35,6 +35,7 @@ import org.springframework.web.util.UriComponentsBuilder; * @author Oliver Gierke * @author Thomas Darimont * @author Nick Williams + * @author Julien Béti */ public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolver implements UriComponentsContributor { @@ -58,7 +59,7 @@ public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodA String description = String.format("pagination.%s.description", sortParameter); 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 diff --git a/src/test/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolverUnitTests.java b/src/test/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolverUnitTests.java index 5c6c51a18..0e6c7a032 100755 --- a/src/test/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolverUnitTests.java +++ b/src/test/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolverUnitTests.java @@ -28,6 +28,7 @@ import org.springframework.web.util.UriComponentsBuilder; * Unit tests for {@link HateoasPageableHandlerMethodArgumentResolver}. * * @author Oliver Gierke + * @author Julien Béti */ class HateoasPageableHandlerMethodArgumentResolverUnitTests extends PageableHandlerMethodArgumentResolverUnitTests { @@ -66,18 +67,18 @@ class HateoasPageableHandlerMethodArgumentResolverUnitTests assertUriStringFor(PageRequest.of(0, 200), "page=0&size=100"); } - @Test // DATACMNS-418 + @Test // DATACMNS-418, GH-2531 void appendsTemplateVariablesCorrectly() { - assertTemplateEnrichment("/foo", "{?page,size,sort}"); - assertTemplateEnrichment("/foo?bar=1", "{&page,size,sort}"); - assertTemplateEnrichment("/foo?page=1", "{&size,sort}"); - assertTemplateEnrichment("/foo?page=1&size=10", "{&sort}"); + assertTemplateEnrichment("/foo", "{?page,size,sort*}"); + assertTemplateEnrichment("/foo?bar=1", "{&page,size,sort*}"); + assertTemplateEnrichment("/foo?page=1", "{&size,sort*}"); + assertTemplateEnrichment("/foo?page=1&size=10", "{&sort*}"); assertTemplateEnrichment("/foo?page=1&sort=foo,asc", "{&size}"); assertTemplateEnrichment("/foo?page=1&size=10&sort=foo,asc", ""); } - @Test // DATACMNS-418 + @Test // DATACMNS-418, GH-2531 void returnsCustomizedTemplateVariables() { var uriComponents = UriComponentsBuilder.fromPath("/foo").build(); @@ -86,7 +87,7 @@ class HateoasPageableHandlerMethodArgumentResolverUnitTests resolver.setPageParameterName("foo"); var variables = resolver.getPaginationTemplateVariables(null, uriComponents).toString(); - assertThat(variables).isEqualTo("{?foo,size,sort}"); + assertThat(variables).isEqualTo("{?foo,size,sort*}"); } @Test // DATACMNS-563 diff --git a/src/test/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolverUnitTests.java b/src/test/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolverUnitTests.java index 16563ccb0..1aa0338a3 100755 --- a/src/test/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolverUnitTests.java +++ b/src/test/java/org/springframework/data/web/HateoasSortHandlerMethodArgumentResolverUnitTests.java @@ -28,6 +28,7 @@ import org.springframework.web.util.UriComponentsBuilder; * Unit tests for {@link HateoasSortHandlerMethodArgumentResolver} * * @author Oliver Gierke + * @author Julien Béti */ class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMethodArgumentResolverUnitTests { @@ -46,13 +47,13 @@ class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMetho assertUriStringFor(SORT, "/?sort=firstname,lastname,desc", "/?sort=foo,asc"); } - @Test // DATACMNS-418 + @Test // DATACMNS-418, GH-2531 void returnCorrectTemplateVariables() { var uriComponents = UriComponentsBuilder.fromPath("/").build(); 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 {