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.
This commit is contained in:
committed by
Oliver Drotbohm
parent
1548ab6551
commit
6e22ffd103
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user