Skip to content

Commit 8742767

Browse files
committed
spring-projects#2168 No TemplateVariable generated for null Pageable
1 parent 6f95471 commit 8742767

5 files changed

+40
-0
lines changed

pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<xmlbeam>1.4.24</xmlbeam>
3535
<java-module-name>spring.data.commons</java-module-name>
3636

37+
<spring-hateoas>2.1.2.1.cosium</spring-hateoas>
3738
</properties>
3839

3940
<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
@@ -22,13 +22,16 @@
2222
import org.springframework.core.MethodParameter;
2323
import org.springframework.data.domain.PageRequest;
2424
import org.springframework.data.domain.Pageable;
25+
import org.springframework.hateoas.TemplateVariables;
2526
import org.springframework.hateoas.server.mvc.UriComponentsContributor;
27+
import org.springframework.web.util.UriComponents;
2628
import org.springframework.web.util.UriComponentsBuilder;
2729

2830
/**
2931
* Unit tests for {@link HateoasPageableHandlerMethodArgumentResolver}.
3032
*
3133
* @author Oliver Gierke
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

+12
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,15 @@
2323
import org.junit.jupiter.api.Test;
2424

2525
import org.springframework.data.domain.Sort;
26+
import org.springframework.hateoas.TemplateVariables;
27+
import org.springframework.web.util.UriComponents;
2628
import org.springframework.web.util.UriComponentsBuilder;
2729

2830
/**
2931
* Unit tests for {@link HateoasSortHandlerMethodArgumentResolver}
3032
*
3133
* @author Oliver Gierke
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)