Skip to content

Commit 7c3e3cd

Browse files
committed
spring-projects#2168 No TemplateVariable generated for null Pageable
1 parent 0ab6ad9 commit 7c3e3cd

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
<xmlbeam>1.4.26</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

Lines changed: 6 additions & 0 deletions
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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
* @author Thomas Darimont
3737
* @author Nick Williams
3838
* @author Julien Béti
39+
* @author Réda Housni Alaoui
3940
*/
4041
public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolver
4142
implements UriComponentsContributor {
@@ -77,4 +78,9 @@ public void enhance(UriComponentsBuilder builder, @Nullable MethodParameter para
7778
builder.queryParam(sortParameter, expression);
7879
}
7980
}
81+
82+
@Override
83+
public TemplateVariables enhance(TemplateVariables templateVariables, UriComponents uriComponents, MethodParameter parameter) {
84+
return templateVariables.concat(getSortTemplateVariables(parameter, uriComponents));
85+
}
8086
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,17 @@
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
3133
* @author Julien Béti
34+
* @author Réda Housni Alaoui
3235
*/
3336
class HateoasPageableHandlerMethodArgumentResolverUnitTests
3437
extends PageableHandlerMethodArgumentResolverUnitTests {
@@ -116,6 +119,18 @@ void enhancesUnpaged() {
116119
assertThat(builder).isEqualTo(builder);
117120
}
118121

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

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
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
3133
* @author Julien Béti
34+
* @author Réda Housni Alaoui
3235
*/
3336
class HateoasSortHandlerMethodArgumentResolverUnitTests extends SortHandlerMethodArgumentResolverUnitTests {
3437

@@ -56,6 +59,15 @@ void returnCorrectTemplateVariables() {
5659
assertThat(resolver.getSortTemplateVariables(null, uriComponents).toString()).isEqualTo("{?sort*}");
5760
}
5861

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+
5971
private void assertUriStringFor(Sort sort, String expected) throws Exception {
6072
assertUriStringFor(sort, expected, "/");
6173
}

0 commit comments

Comments
 (0)