diff --git a/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java b/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java index 4c8c118d9..b61e9ac0b 100644 --- a/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java +++ b/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java @@ -219,7 +219,9 @@ public class PagedResourcesAssembler implements ResourceAssembler, Pa resources.add(createLink(base, page.previousPageable(), Link.REL_PREVIOUS)); } - resources.add(createLink(base, null, Link.REL_SELF)); + Pageable current = new PageRequest(page.getNumber(), page.getSize(), page.getSort()); + + resources.add(link == null ? createLink(base, current, Link.REL_SELF) : link.withSelfRel()); if (page.hasNext()) { resources.add(createLink(base, page.nextPageable(), Link.REL_NEXT)); diff --git a/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java b/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java index 8138dcb8c..d082cbd21 100644 --- a/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java +++ b/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java @@ -25,6 +25,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.hamcrest.Matcher; import org.junit.Before; import org.junit.Test; import org.springframework.data.domain.AbstractPageRequest; @@ -52,6 +53,7 @@ public class PagedResourcesAssemblerUnitTests { static final Pageable PAGEABLE = new PageRequest(0, 20); static final Page EMPTY_PAGE = new PageImpl(Collections. emptyList(), PAGEABLE, 0); + static final Matcher NO_TEMPLATE_VARIABLES = allOf(not(containsString("{")), not(containsString("}"))); HateoasPageableHandlerMethodArgumentResolver resolver = new HateoasPageableHandlerMethodArgumentResolver(); PagedResourcesAssembler assembler = new PagedResourcesAssembler(resolver, null); @@ -133,7 +135,7 @@ public class PagedResourcesAssemblerUnitTests { PagedResources> resources = assembler.toResource(createPage(1)); Link selfLink = resources.getLink(Link.REL_SELF); - assertThat(selfLink.getHref(), endsWith("localhost")); + assertThat(selfLink.getHref(), NO_TEMPLATE_VARIABLES); } @Test // DATACMNS-418 @@ -171,7 +173,7 @@ public class PagedResourcesAssemblerUnitTests { PagedResources> resources = assembler.toResource(createPage(1)); - assertThat(resources.getLink(Link.REL_SELF).getHref(), endsWith("localhost")); + assertThat(resources.getLink(Link.REL_SELF).getHref(), NO_TEMPLATE_VARIABLES); assertThat(resources.getLink(Link.REL_NEXT).getHref(), endsWith("?page=2&size=1")); assertThat(resources.getLink(Link.REL_PREVIOUS).getHref(), endsWith("?page=0&size=1")); } @@ -247,6 +249,14 @@ public class PagedResourcesAssemblerUnitTests { assertThat(assembler.toResource(EMPTY_PAGE), is(instanceOf(CustomPagedResources.class))); } + @Test // DATACMNS-1042 + public void selfLinkContainsCoordinatesForCurrentPage() { + + PagedResources> resource = assembler.toResource(createPage(0)); + + assertThat(resource.getLink(Link.REL_SELF).getHref(), endsWith("?page=0&size=1")); + } + private static Page createPage(int index) { AbstractPageRequest request = new PageRequest(index, 1);