Spring for GraphQL 为 federation-jvm 库提供了集成,该库使用 GraphQL Java 用于初始化联合服务图中子图的模式。 有关详细信息,请参阅 Apollo FederationSubgraph 规范Spring中文文档

配置

要启用集成,请在配置中声明一个 bean,然后插入 它变成了 .例如,使用 Spring Boot:FederationSchemaFactoryGraphQlSource.BuilderSpring中文文档

@Configuration
public class FederationConfig {

	@Bean
	public GraphQlSourceBuilderCustomizer customizer(FederationSchemaFactory factory) {
		return builder -> builder.schemaFactory(factory::createGraphQLSchema);
	}

	@Bean
	public FederationSchemaFactory schemaFactory() {
		return new FederationSchemaFactory();
	}
}

现在,子图服务的架构可以扩展联合类型:Spring中文文档

type Book @key(fields: "id") @extends {
    id: ID! @external
    author: Author
}

type Author {
    id: ID
    firstName: String
    lastName: String
}

@EntityMapping

方法可以加载联合类型实例,以响应来自联合网关的_entities查询。例如:@EntityMappingSpring中文文档

@Controller
private static class BookController {

	@EntityMapping
	public Book book(@Argument int id) { (1)
		// ...
	}

	@SchemaMapping
	public Author author(Book book) { (2)
		// ...
	}

}
1 方法参数从 实体。也可以解析完整的“表示”输入。有关支持,请参阅方法签名 method 参数和返回值类型。@ArgumentMap
2 @SchemaMapping方法可用于图形的其余部分。

方法可以批量加载给定类型的联合实体。为此, 将 method 参数声明为列表,并返回相应的实体 实例以相同的顺序作为列表。@EntityMapping@ArgumentSpring中文文档

@Controller
private static class BookController {

	@EntityMapping
	public List<Book> book(@Argument List<Integer> idList) { (1)
		// ... return books in the same order
	}

	@BatchMapping
	public Map<Book, Author> author(List<Book> books) { (2)
		// ...
	}
}
1 命名约定有助于使参数名称非复数化,以便 在“表示”输入映射中查找正确的值。您还可以将 参数名称。idList
2 @BatchMapping方法可用于图形的其余部分。

方法签名

实体映射方法支持以下参数:Spring中文文档

Method 参数 描述

@ArgumentSpring中文文档

用于从“表示”输入映射访问命名值,该映射也转换为类型化的 Object。Spring中文文档

Map<String, Object>Spring中文文档

实体的完整“表示”输入映射。Spring中文文档

List<Map<String, Object>>Spring中文文档

使用单个控制器方法加载时的“表示”输入映射列表 给定类型的所有实体。Spring中文文档

@ContextValueSpring中文文档

用于从 main 中的属性访问 。GraphQLContextDataFetchingEnvironmentSpring中文文档

@LocalContextValueSpring中文文档

用于从 中的本地访问属性。GraphQLContextDataFetchingEnvironmentSpring中文文档

GraphQLContextSpring中文文档

要从 .DataFetchingEnvironmentSpring中文文档

java.security.PrincipalSpring中文文档

从 Spring Security 上下文中获取(如果可用)。Spring中文文档

@AuthenticationPrincipalSpring中文文档

用于从 Spring Security 上下文访问。Authentication#getPrincipal()Spring中文文档

DataFetchingFieldSelectionSetSpring中文文档

要通过 .DataFetchingEnvironmentSpring中文文档

Locale,Optional<Locale>Spring中文文档

要从 .LocaleDataFetchingEnvironmentSpring中文文档

DataFetchingEnvironmentSpring中文文档

用于直接访问底层 .DataFetchingEnvironmentSpring中文文档

@EntityMapping方法可以返回 、 、 或实际实体。MonoCompletableFutureCallableSpring中文文档

异常处理

可以使用方法将异常从方法映射到 的 。这些错误将包含在 “_entities”查询。异常处理程序方法可以位于同一控制器中,也可以位于类中。@GraphQlExceptionHandler@EntityMappingGraphQLError@ControllerAdviceSpring中文文档

1 方法参数从 实体。也可以解析完整的“表示”输入。有关支持,请参阅方法签名 method 参数和返回值类型。@ArgumentMap
2 @SchemaMapping方法可用于图形的其余部分。
1 命名约定有助于使参数名称非复数化,以便 在“表示”输入映射中查找正确的值。您还可以将 参数名称。idList
2 @BatchMapping方法可用于图形的其余部分。
Method 参数 描述

@ArgumentSpring中文文档

用于从“表示”输入映射访问命名值,该映射也转换为类型化的 Object。Spring中文文档

Map<String, Object>Spring中文文档

实体的完整“表示”输入映射。Spring中文文档

List<Map<String, Object>>Spring中文文档

使用单个控制器方法加载时的“表示”输入映射列表 给定类型的所有实体。Spring中文文档

@ContextValueSpring中文文档

用于从 main 中的属性访问 。GraphQLContextDataFetchingEnvironmentSpring中文文档

@LocalContextValueSpring中文文档

用于从 中的本地访问属性。GraphQLContextDataFetchingEnvironmentSpring中文文档

GraphQLContextSpring中文文档

要从 .DataFetchingEnvironmentSpring中文文档

java.security.PrincipalSpring中文文档

从 Spring Security 上下文中获取(如果可用)。Spring中文文档

@AuthenticationPrincipalSpring中文文档

用于从 Spring Security 上下文访问。Authentication#getPrincipal()Spring中文文档

DataFetchingFieldSelectionSetSpring中文文档

要通过 .DataFetchingEnvironmentSpring中文文档

Locale,Optional<Locale>Spring中文文档

要从 .LocaleDataFetchingEnvironmentSpring中文文档

DataFetchingEnvironmentSpring中文文档

用于直接访问底层 .DataFetchingEnvironmentSpring中文文档