Skip to content

Commit a2342b4

Browse files
committed
spring-projects#2168 No TemplateVariable generated for null Pageable
1 parent 8608aea commit a2342b4

5 files changed

+39
-1
lines changed

pom.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<xmlbeam>1.4.23</xmlbeam>
2222
<java-module-name>spring.data.commons</java-module-name>
2323

24+
<spring-hateoas>1.1.0.0.cosium</spring-hateoas>
2425
</properties>
2526

2627
<dependencies>
@@ -222,7 +223,7 @@
222223
<version>${vavr}</version>
223224
<optional>true</optional>
224225
</dependency>
225-
226+
226227
<!-- Eclipse Collections -->
227228

228229
<dependency>

src/main/java/org/springframework/data/web/HateoasPageableHandlerMethodArgumentResolver.java

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
* @since 1.6
4141
* @author Oliver Gierke
4242
* @author Nick Williams
43+
* @author Réda Housni Alaoui
4344
*/
4445
@SuppressWarnings("null")
4546
public class HateoasPageableHandlerMethodArgumentResolver extends PageableHandlerMethodArgumentResolver
@@ -129,6 +130,11 @@ public void enhance(UriComponentsBuilder builder, @Nullable MethodParameter para
129130
this.sortResolver.enhance(builder, parameter, pageable.getSort());
130131
}
131132

133+
@Override
134+
public TemplateVariables enhance(TemplateVariables templateVariables, UriComponents uriComponents, MethodParameter parameter) {
135+
return templateVariables.concat(getPaginationTemplateVariables(parameter, uriComponents));
136+
}
137+
132138
private static HateoasSortHandlerMethodArgumentResolver getDefaultedSortResolver(
133139
@Nullable HateoasSortHandlerMethodArgumentResolver sortResolver) {
134140
return sortResolver == null ? DEFAULT_SORT_RESOLVER : sortResolver;

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

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
* @author Oliver Gierke
3737
* @author Thomas Darimont
3838
* @author Nick Williams
39+
* @author Réda Housni Alaoui
3940
*/
4041
public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolver
4142
implements UriComponentsContributor {
@@ -82,4 +83,9 @@ public void enhance(UriComponentsBuilder builder, @Nullable MethodParameter para
8283
builder.queryParam(sortParameter, expression);
8384
}
8485
}
86+
87+
@Override
88+
public TemplateVariables enhance(TemplateVariables templateVariables, UriComponents uriComponents, MethodParameter parameter) {
89+
return templateVariables.concat(getSortTemplateVariables(parameter, uriComponents));
90+
}
8591
}

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

+14
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.springframework.core.MethodParameter;
2424
import org.springframework.data.domain.PageRequest;
2525
import org.springframework.data.domain.Pageable;
26+
import org.springframework.hateoas.TemplateVariables;
2627
import org.springframework.hateoas.server.mvc.UriComponentsContributor;
2728
import org.springframework.util.MultiValueMap;
2829
import org.springframework.web.util.UriComponents;
@@ -32,6 +33,7 @@
3233
* Unit tests for {@link HateoasPageableHandlerMethodArgumentResolver}.
3334
*
3435
* @author Oliver Gierke
36+
* @author Réda Housni Alaoui
3537
*/
3638
class HateoasPageableHandlerMethodArgumentResolverUnitTests
3739
extends PageableHandlerMethodArgumentResolverUnitTests {
@@ -119,6 +121,18 @@ void enhancesUnpaged() {
119121
assertThat(builder).isEqualTo(builder);
120122
}
121123

124+
@Test // DATACMNS-1752
125+
void enhanceTemplateVariables() {
126+
127+
UriComponents uriComponents = UriComponentsBuilder.fromPath("/foo").build();
128+
129+
HateoasPageableHandlerMethodArgumentResolver resolver = getResolver();
130+
resolver.setPageParameterName("foo");
131+
String variables = resolver.enhance(TemplateVariables.NONE, uriComponents, null).toString();
132+
133+
assertThat(variables).isEqualTo("{?foo,size,sort}");
134+
}
135+
122136
@Override
123137
protected HateoasPageableHandlerMethodArgumentResolver getResolver() {
124138

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

+11
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323
import org.junit.jupiter.api.Test;
2424
import org.springframework.core.MethodParameter;
2525
import org.springframework.data.domain.Sort;
26+
import org.springframework.hateoas.TemplateVariables;
2627
import org.springframework.web.util.UriComponents;
2728
import org.springframework.web.util.UriComponentsBuilder;
2829

2930
/**
3031
* Unit tests for {@link HateoasSortHandlerMethodArgumentResolver}
3132
*
3233
* @author Oliver Gierke
34+
* @author Réda Housni Alaoui
3335
*/
3436
class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMethodArgumentResolverUnitTests {
3537

@@ -57,6 +59,15 @@ void returnCorrectTemplateVariables() {
5759
assertThat(resolver.getSortTemplateVariables(null, uriComponents).toString()).isEqualTo("{?sort}");
5860
}
5961

62+
@Test // DATACMNS-1752
63+
void enhanceTemplateVariables(){
64+
65+
UriComponents uriComponents = UriComponentsBuilder.fromPath("/").build();
66+
67+
HateoasSortHandlerMethodArgumentResolver resolver = new HateoasSortHandlerMethodArgumentResolver();
68+
assertThat(resolver.enhance(TemplateVariables.NONE, uriComponents, null).toString()).isEqualTo("{?sort}");
69+
}
70+
6071
private void assertUriStringFor(Sort sort, String expected) throws Exception {
6172
assertUriStringFor(sort, expected, "/");
6273
}

0 commit comments

Comments
 (0)