Skip to content

Commit aac2e95

Browse files
committed
spring-projects#2168 No TemplateVariable generated for null Pageable
1 parent a3a3479 commit aac2e95

5 files changed

+41
-0
lines changed

pom.xml

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
<xmlbeam>1.4.24</xmlbeam>
3535
<java-module-name>spring.data.commons</java-module-name>
3636
<kotlin.api.target>1.8</kotlin.api.target>
37+
38+
<spring-hateoas>2.2.0.1.cosium</spring-hateoas>
3739
</properties>
3840

3941
<dependencies>

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

+6
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
* @since 1.6
4040
* @author Oliver Gierke
4141
* @author Nick Williams
42+
* @author Réda Housni Alaoui
4243
*/
4344
@SuppressWarnings("null")
4445
public class HateoasPageableHandlerMethodArgumentResolver extends PageableHandlerMethodArgumentResolver
@@ -122,6 +123,11 @@ public void enhance(UriComponentsBuilder builder, @Nullable MethodParameter para
122123
this.sortResolver.enhance(builder, parameter, pageable.getSort());
123124
}
124125

126+
@Override
127+
public TemplateVariables enhance(TemplateVariables templateVariables, UriComponents uriComponents, MethodParameter parameter) {
128+
return templateVariables.concat(getPaginationTemplateVariables(parameter, uriComponents));
129+
}
130+
125131
private static HateoasSortHandlerMethodArgumentResolver getDefaultedSortResolver(
126132
@Nullable HateoasSortHandlerMethodArgumentResolver sortResolver) {
127133
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
@@ -35,6 +35,7 @@
3535
* @author Oliver Gierke
3636
* @author Thomas Darimont
3737
* @author Nick Williams
38+
* @author Réda Housni Alaoui
3839
*/
3940
public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolver
4041
implements UriComponentsContributor {
@@ -76,4 +77,9 @@ public void enhance(UriComponentsBuilder builder, @Nullable MethodParameter para
7677
builder.queryParam(sortParameter, expression);
7778
}
7879
}
80+
81+
@Override
82+
public TemplateVariables enhance(TemplateVariables templateVariables, UriComponents uriComponents, MethodParameter parameter) {
83+
return templateVariables.concat(getSortTemplateVariables(parameter, uriComponents));
84+
}
7985
}

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

+15
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121
import org.springframework.core.MethodParameter;
2222
import org.springframework.data.domain.PageRequest;
2323
import org.springframework.data.domain.Pageable;
24+
import org.springframework.hateoas.TemplateVariables;
2425
import org.springframework.hateoas.server.mvc.UriComponentsContributor;
26+
import org.springframework.web.util.UriComponents;
2527
import org.springframework.web.util.UriComponentsBuilder;
2628

2729
/**
2830
* Unit tests for {@link HateoasPageableHandlerMethodArgumentResolver}.
2931
*
3032
* @author Oliver Gierke
33+
* @author Réda Housni Alaoui
3134
*/
3235
class HateoasPageableHandlerMethodArgumentResolverUnitTests
3336
extends PageableHandlerMethodArgumentResolverUnitTests {
@@ -115,6 +118,18 @@ void enhancesUnpaged() {
115118
assertThat(builder).isEqualTo(builder);
116119
}
117120

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

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

+12
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@
2222

2323
import org.junit.jupiter.api.Test;
2424
import org.springframework.data.domain.Sort;
25+
import org.springframework.hateoas.TemplateVariables;
26+
import org.springframework.web.util.UriComponents;
2527
import org.springframework.web.util.UriComponentsBuilder;
2628

2729
/**
2830
* Unit tests for {@link HateoasSortHandlerMethodArgumentResolver}
2931
*
3032
* @author Oliver Gierke
33+
* @author Réda Housni Alaoui
3134
*/
3235
class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMethodArgumentResolverUnitTests {
3336

@@ -55,6 +58,15 @@ void returnCorrectTemplateVariables() {
5558
assertThat(resolver.getSortTemplateVariables(null, uriComponents).toString()).isEqualTo("{?sort}");
5659
}
5760

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

0 commit comments

Comments
 (0)