From 517bb5f202d11aa6c914242d07d891b704de0835 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Wed, 17 Feb 2021 14:00:02 +0100 Subject: [PATCH] #1974 - Improve default LinkRelationProvider setup to also consider @Relation. RepositoryRestConfiguration now defaults the LinkRelationProvider instance to a delegating one considering both AnnotationLinkRelationProvider and EvoLinkRelationProvider so that @Relation annotations on entity types. --- .../core/config/RepositoryRestConfiguration.java | 6 ++++++ .../core/RepositoryRestConfigurationUnitTests.java | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java index d5317b2d0..7248e7ac2 100644 --- a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java +++ b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java @@ -29,6 +29,8 @@ import org.springframework.data.rest.core.mapping.RepositoryDetectionStrategy.Re import org.springframework.data.rest.core.support.EntityLookup; import org.springframework.hateoas.MediaTypes; import org.springframework.hateoas.server.LinkRelationProvider; +import org.springframework.hateoas.server.core.AnnotationLinkRelationProvider; +import org.springframework.hateoas.server.core.DelegatingLinkRelationProvider; import org.springframework.hateoas.server.core.EvoInflectorLinkRelationProvider; import org.springframework.http.MediaType; import org.springframework.util.Assert; @@ -96,6 +98,10 @@ public class RepositoryRestConfiguration { this.enumTranslationConfiguration = enumTranslationConfiguration; this.entityLookupConfiguration = new EntityLookupConfiguration(); this.exposureConfiguration = new ExposureConfiguration(); + + this.relProvider = new DelegatingLinkRelationProvider( // + new AnnotationLinkRelationProvider(), // + new EvoInflectorLinkRelationProvider()); } /** diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/RepositoryRestConfigurationUnitTests.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/RepositoryRestConfigurationUnitTests.java index fdc82c4d9..9477b0a5c 100755 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/RepositoryRestConfigurationUnitTests.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/RepositoryRestConfigurationUnitTests.java @@ -26,6 +26,8 @@ import org.springframework.data.rest.core.config.ProjectionDefinitionConfigurati import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.data.rest.core.domain.Profile; import org.springframework.data.rest.core.domain.ProfileRepository; +import org.springframework.hateoas.LinkRelation; +import org.springframework.hateoas.server.core.Relation; import org.springframework.http.MediaType; /** @@ -119,4 +121,15 @@ public class RepositoryRestConfigurationUnitTests { public void rejectsNullRelProvider() { assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> configuration.setRelProvider(null)); } + + @Test // #1974 + public void considersAtRelationOnTypesByDefault() { + assertThat(configuration.getRelProvider().getItemResourceRelFor(Sample.class)) + .isEqualTo(LinkRelation.of("something")); + } + + @Relation("something") + static class Sample { + + } }