Skip to content

Commit b5e3f73

Browse files
committed
#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.
1 parent 1462784 commit b5e3f73

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.springframework.data.rest.core.support.EntityLookup;
3434
import org.springframework.hateoas.MediaTypes;
3535
import org.springframework.hateoas.server.LinkRelationProvider;
36+
import org.springframework.hateoas.server.core.AnnotationLinkRelationProvider;
37+
import org.springframework.hateoas.server.core.DelegatingLinkRelationProvider;
3638
import org.springframework.hateoas.server.core.EvoInflectorLinkRelationProvider;
3739
import org.springframework.http.MediaType;
3840
import org.springframework.util.Assert;
@@ -103,6 +105,10 @@ public RepositoryRestConfiguration(ProjectionDefinitionConfiguration projectionC
103105
this.enumTranslationConfiguration = enumTranslationConfiguration;
104106
this.entityLookupConfiguration = new EntityLookupConfiguration();
105107
this.exposureConfiguration = new ExposureConfiguration();
108+
109+
this.relProvider = new DelegatingLinkRelationProvider( //
110+
new AnnotationLinkRelationProvider(), //
111+
new EvoInflectorLinkRelationProvider());
106112
}
107113

108114
/**

spring-data-rest-core/src/test/java/org/springframework/data/rest/core/RepositoryRestConfigurationUnitTests.java

+13
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
3030
import org.springframework.data.rest.core.domain.Profile;
3131
import org.springframework.data.rest.core.domain.ProfileRepository;
32+
import org.springframework.hateoas.LinkRelation;
33+
import org.springframework.hateoas.server.core.Relation;
3234
import org.springframework.http.MediaType;
3335
import org.springframework.web.cors.CorsConfiguration;
3436

@@ -136,4 +138,15 @@ public void configuresCorsProcessing() {
136138
public void rejectsNullRelProvider() {
137139
assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> configuration.setRelProvider(null));
138140
}
141+
142+
@Test // #1974
143+
public void considersAtRelationOnTypesByDefault() {
144+
assertThat(configuration.getRelProvider().getItemResourceRelFor(Sample.class))
145+
.isEqualTo(LinkRelation.of("something"));
146+
}
147+
148+
@Relation("something")
149+
static class Sample {
150+
151+
}
139152
}

0 commit comments

Comments
 (0)