Skip to content

Commit 22f5a02

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 9ee4cf4 commit 22f5a02

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
@@ -29,6 +29,8 @@
2929
import org.springframework.data.rest.core.support.EntityLookup;
3030
import org.springframework.hateoas.MediaTypes;
3131
import org.springframework.hateoas.server.LinkRelationProvider;
32+
import org.springframework.hateoas.server.core.AnnotationLinkRelationProvider;
33+
import org.springframework.hateoas.server.core.DelegatingLinkRelationProvider;
3234
import org.springframework.hateoas.server.core.EvoInflectorLinkRelationProvider;
3335
import org.springframework.http.MediaType;
3436
import org.springframework.util.Assert;
@@ -98,6 +100,10 @@ public RepositoryRestConfiguration(ProjectionDefinitionConfiguration projectionC
98100
this.enumTranslationConfiguration = enumTranslationConfiguration;
99101
this.entityLookupConfiguration = new EntityLookupConfiguration();
100102
this.exposureConfiguration = new ExposureConfiguration();
103+
104+
this.relProvider = new DelegatingLinkRelationProvider( //
105+
new AnnotationLinkRelationProvider(), //
106+
new EvoInflectorLinkRelationProvider());
101107
}
102108

103109
/**

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

+13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
2727
import org.springframework.data.rest.core.domain.Profile;
2828
import org.springframework.data.rest.core.domain.ProfileRepository;
29+
import org.springframework.hateoas.LinkRelation;
30+
import org.springframework.hateoas.server.core.Relation;
2931
import org.springframework.http.MediaType;
3032

3133
/**
@@ -119,4 +121,15 @@ public void considersDomainTypeOfValueRepositoryLookupTypes() {
119121
public void rejectsNullRelProvider() {
120122
assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> configuration.setRelProvider(null));
121123
}
124+
125+
@Test // #1974
126+
public void considersAtRelationOnTypesByDefault() {
127+
assertThat(configuration.getRelProvider().getItemResourceRelFor(Sample.class))
128+
.isEqualTo(LinkRelation.of("something"));
129+
}
130+
131+
@Relation("something")
132+
static class Sample {
133+
134+
}
122135
}

0 commit comments

Comments
 (0)