#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.
This commit is contained in:
Oliver Drotbohm
2021-02-17 14:00:02 +01:00
parent dc0e0bbcef
commit 517bb5f202
2 changed files with 19 additions and 0 deletions

View File

@@ -29,6 +29,8 @@ import org.springframework.data.rest.core.mapping.RepositoryDetectionStrategy.Re
import org.springframework.data.rest.core.support.EntityLookup; import org.springframework.data.rest.core.support.EntityLookup;
import org.springframework.hateoas.MediaTypes; import org.springframework.hateoas.MediaTypes;
import org.springframework.hateoas.server.LinkRelationProvider; 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.hateoas.server.core.EvoInflectorLinkRelationProvider;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@@ -96,6 +98,10 @@ public class RepositoryRestConfiguration {
this.enumTranslationConfiguration = enumTranslationConfiguration; this.enumTranslationConfiguration = enumTranslationConfiguration;
this.entityLookupConfiguration = new EntityLookupConfiguration(); this.entityLookupConfiguration = new EntityLookupConfiguration();
this.exposureConfiguration = new ExposureConfiguration(); this.exposureConfiguration = new ExposureConfiguration();
this.relProvider = new DelegatingLinkRelationProvider( //
new AnnotationLinkRelationProvider(), //
new EvoInflectorLinkRelationProvider());
} }
/** /**

View File

@@ -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.config.RepositoryRestConfiguration;
import org.springframework.data.rest.core.domain.Profile; import org.springframework.data.rest.core.domain.Profile;
import org.springframework.data.rest.core.domain.ProfileRepository; 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; import org.springframework.http.MediaType;
/** /**
@@ -119,4 +121,15 @@ public class RepositoryRestConfigurationUnitTests {
public void rejectsNullRelProvider() { public void rejectsNullRelProvider() {
assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> configuration.setRelProvider(null)); 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 {
}
} }