diff --git a/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java b/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java index 6c0442aaf..12bef4844 100644 --- a/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java +++ b/src/main/java/org/springframework/data/web/PagedResourcesAssembler.java @@ -189,7 +189,9 @@ public class PagedResourcesAssembler implements ResourceAssembler, Pa UriTemplate base = getUriTemplate(link); - if (page.hasPrevious() || forceFirstAndLastRels) { + boolean isNavigable = page.hasPrevious() || page.hasNext(); + + if (isNavigable || forceFirstAndLastRels) { resources.add(createLink(base, new PageRequest(0, page.getSize(), page.getSort()), Link.REL_FIRST)); } @@ -203,7 +205,7 @@ public class PagedResourcesAssembler implements ResourceAssembler, Pa resources.add(createLink(base, page.nextPageable(), Link.REL_NEXT)); } - if (page.hasNext() || forceFirstAndLastRels) { + if (isNavigable || forceFirstAndLastRels) { int lastIndex = page.getTotalPages() == 0 ? 0 : page.getTotalPages() - 1; @@ -221,8 +223,8 @@ public class PagedResourcesAssembler implements ResourceAssembler, Pa */ private UriTemplate getUriTemplate(Link baseLink) { - String href = baseLink != null ? baseLink.getHref() : baseUri == null ? ServletUriComponentsBuilder - .fromCurrentRequest().build().toString() : baseUri.toString(); + String href = baseLink != null ? baseLink.getHref() + : baseUri == null ? ServletUriComponentsBuilder.fromCurrentRequest().build().toString() : baseUri.toString(); return new UriTemplate(href); } diff --git a/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java b/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java index 68f7983b7..35cb181fb 100644 --- a/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java +++ b/src/test/java/org/springframework/data/web/PagedResourcesAssemblerUnitTests.java @@ -238,11 +238,11 @@ public class PagedResourcesAssemblerUnitTests { * @see DATACMNS-701 */ @Test - public void doesNotAddFirstLinkForFirstPageByDefault() { + public void addsFirstAndLastLinksForFirstPage() { PagedResources> resources = assembler.toResource(createPage(0)); - assertThat(resources.getLink(Link.REL_FIRST), is(nullValue())); + assertThat(resources.getLink(Link.REL_FIRST).getHref(), endsWith("?page=0&size=1")); assertThat(resources.getLink(Link.REL_LAST).getHref(), endsWith("?page=2&size=1")); } @@ -250,12 +250,12 @@ public class PagedResourcesAssemblerUnitTests { * @see DATACMNS-701 */ @Test - public void doesNotAddLastLinkForLastPageByDefault() { + public void addsFirstAndLastLinksForLastPage() { PagedResources> resources = assembler.toResource(createPage(2)); assertThat(resources.getLink(Link.REL_FIRST).getHref(), endsWith("?page=0&size=1")); - assertThat(resources.getLink(Link.REL_LAST), is(nullValue())); + assertThat(resources.getLink(Link.REL_LAST).getHref(), endsWith("?page=2&size=1")); } /**