diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/AbstractRepositoryRestController.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/AbstractRepositoryRestController.java index 4a1ef352b..48167a1fa 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/AbstractRepositoryRestController.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/AbstractRepositoryRestController.java @@ -20,12 +20,14 @@ import static org.springframework.data.rest.webmvc.ControllerUtils.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; import org.springframework.data.auditing.AuditableBeanWrapperFactory; import org.springframework.data.domain.Page; import org.springframework.data.rest.core.mapping.ResourceMetadata; import org.springframework.data.web.PagedResourcesAssembler; import org.springframework.hateoas.Link; +import org.springframework.hateoas.PagedResources; import org.springframework.hateoas.Resource; import org.springframework.hateoas.Resources; import org.springframework.hateoas.core.EmbeddedWrappers; @@ -69,7 +71,7 @@ class AbstractRepositoryRestController { @SuppressWarnings({ "unchecked" }) protected Resources toResources(Iterable source, PersistentEntityResourceAssembler assembler, - Class domainType, Link baseLink) { + Class domainType, Optional baseLink) { if (source instanceof Page) { Page page = (Page) source; @@ -82,14 +84,15 @@ class AbstractRepositoryRestController { } protected Resources entitiesToResources(Page page, PersistentEntityResourceAssembler assembler, - Class domainType, Link baseLink) { + Class domainType, Optional baseLink) { if (page.getContent().isEmpty()) { - return pagedResourcesAssembler.toEmptyResource(page, domainType, baseLink); + return baseLink.> map(it -> pagedResourcesAssembler.toEmptyResource(page, domainType, it))// + .orElseGet(() -> pagedResourcesAssembler.toEmptyResource(page, domainType)); } - return baseLink == null ? pagedResourcesAssembler.toResource(page, assembler) - : pagedResourcesAssembler.toResource(page, assembler, baseLink); + return baseLink.map(it -> pagedResourcesAssembler.toResource(page, assembler, it))// + .orElseGet(() -> pagedResourcesAssembler.toResource(page, assembler)); } protected Resources entitiesToResources(Iterable entities, PersistentEntityResourceAssembler assembler, diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryEntityController.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryEntityController.java index d821d2011..761223533 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryEntityController.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryEntityController.java @@ -203,8 +203,8 @@ class RepositoryEntityController extends AbstractRepositoryRestController implem : invoker.invokeFindAll(sort); ResourceMetadata metadata = resourceInformation.getResourceMetadata(); - Link baseLink = entityLinks.linkToPagedResource(resourceInformation.getDomainType(), - pageable.isDefault() ? null : pageable.getPageable()); + Optional baseLink = Optional.of(entityLinks.linkToPagedResource(resourceInformation.getDomainType(), + pageable.isDefault() ? null : pageable.getPageable())); Resources result = toResources(results, assembler, metadata.getDomainType(), baseLink); result.add(getCollectionResourceLinks(resourceInformation, pageable)); diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryPropertyReferenceController.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryPropertyReferenceController.java index 55d84c0a0..e2dbefcfb 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryPropertyReferenceController.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryPropertyReferenceController.java @@ -119,7 +119,7 @@ class RepositoryPropertyReferenceController extends AbstractRepositoryRestContro if (prop.property.isCollectionLike()) { - return toResources((Iterable) it, assembler, prop.propertyType, null); + return toResources((Iterable) it, assembler, prop.propertyType, Optional.empty()); } else if (prop.property.isMap()) { diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositorySearchController.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositorySearchController.java index 339b72e90..cadc91225 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositorySearchController.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositorySearchController.java @@ -187,7 +187,7 @@ class RepositorySearchController extends AbstractRepositoryRestController { MethodResourceMapping methodMapping = searchMappings.getExportedMethodMappingForPath(search); Class domainType = methodMapping.getReturnedDomainType(); - return toResource(result, assembler, domainType, null, headers, resourceInformation); + return toResource(result, assembler, domainType, Optional.empty(), headers, resourceInformation); } /** @@ -201,7 +201,7 @@ class RepositorySearchController extends AbstractRepositoryRestController { * @return */ protected ResponseEntity toResource(Optional source, final PersistentEntityResourceAssembler assembler, - Class domainType, Link baseLink, HttpHeaders headers, RootResourceInformation information) { + Class domainType, Optional baseLink, HttpHeaders headers, RootResourceInformation information) { return source.map(it -> { @@ -243,7 +243,7 @@ class RepositorySearchController extends AbstractRepositoryRestController { Optional result = executeQueryMethod(resourceInformation.getInvoker(), parameters, method, pageable, sort, assembler); ResourceMetadata metadata = resourceInformation.getResourceMetadata(); - ResponseEntity entity = toResource(result, assembler, metadata.getDomainType(), null, headers, + ResponseEntity entity = toResource(result, assembler, metadata.getDomainType(), Optional.empty(), headers, resourceInformation); Object resource = entity.getBody();