Skip to content

Commit fab654e

Browse files
committed
Merge branch '1.4.x'
2 parents d755034 + 14baa4e commit fab654e

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

spring-graphql/src/main/java/org/springframework/graphql/data/federation/FederationSchemaFactory.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626

2727
import com.apollographql.federation.graphqljava.Federation;
2828
import com.apollographql.federation.graphqljava.SchemaTransformer;
29+
import graphql.language.Argument;
30+
import graphql.language.BooleanValue;
31+
import graphql.language.Directive;
2932
import graphql.language.TypeDefinition;
3033
import graphql.schema.DataFetcher;
3134
import graphql.schema.GraphQLSchema;
@@ -189,8 +192,7 @@ private void checkEntityMappings(TypeDefinitionRegistry registry) {
189192
List<String> unmappedEntities = new ArrayList<>();
190193
for (TypeDefinition<?> type : registry.types().values()) {
191194
type.getDirectives().forEach((directive) -> {
192-
boolean isEntityType = directive.getName().equalsIgnoreCase("key");
193-
if (isEntityType && !this.handlerMethods.containsKey(type.getName())) {
195+
if (isResolvableKeyDirective(directive) && !this.handlerMethods.containsKey(type.getName())) {
194196
unmappedEntities.add(type.getName());
195197
}
196198
});
@@ -201,6 +203,18 @@ private void checkEntityMappings(TypeDefinitionRegistry registry) {
201203
}
202204
}
203205

206+
private boolean isResolvableKeyDirective(Directive directive) {
207+
if (!directive.getName().equalsIgnoreCase("key")) {
208+
return false;
209+
}
210+
Argument argument = directive.getArgument("resolvable");
211+
if (argument != null) {
212+
Object value = argument.getValue();
213+
return (value instanceof BooleanValue bv && bv.isValue());
214+
}
215+
return true;
216+
}
217+
204218

205219
public record EntityMappingInfo(String typeName, HandlerMethod handlerMethod) {
206220

spring-graphql/src/main/java/org/springframework/graphql/server/WebGraphQlRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import org.jspecify.annotations.Nullable;
2626

27-
import org.springframework.graphql.ExecutionGraphQlRequest;
2827
import org.springframework.graphql.GraphQlRequest;
2928
import org.springframework.graphql.support.DefaultExecutionGraphQlRequest;
3029
import org.springframework.http.HttpCookie;
@@ -48,7 +47,7 @@
4847
* @author Rossen Stoyanchev
4948
* @since 1.0.0
5049
*/
51-
public class WebGraphQlRequest extends DefaultExecutionGraphQlRequest implements ExecutionGraphQlRequest {
50+
public class WebGraphQlRequest extends DefaultExecutionGraphQlRequest {
5251

5352
private static final MultiValueMap<String, HttpCookie> EMPTY_COOKIES =
5453
CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>());
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
extend schema @link(url: "https://specs.apollo.dev/federation/v2.9", import: ["@key", "@extends", "@external"] )
2+
13
type Book @key(fields: "id") @extends {
24
id: ID! @external
35
author: Author
6+
publisher: Publisher
47
}
58

69
type Author {
710
id: ID
811
firstName: String
912
lastName: String
1013
}
14+
15+
type Publisher @key(fields: "id", resolvable: false) {
16+
id: ID! @external
17+
}

0 commit comments

Comments
 (0)