🍊
翻译橙
🍊返回主站🤖参与贡献
  • hello,这里是翻译橙
  • spring boot参考文档
    • 1. 法律
    • 2. 寻求帮助
    • 3. 文档概述
    • 4. 入门
    • 5. 升级Spring Boot
    • 6. 使用 Spring Boot 进行开发
      • 6.1. 构建系统
      • 6.2. 构建你的代码
      • 6.3. 配置类
      • 6.4. 自动配置
      • 6.5. Spring Bean 和依赖注入
      • 6.6. 使用@SpringBootApplication注解
      • 6.7. 运行您的应用程序
      • 6.8. 开发者工具
      • 6.9. 打包您的生产应用程序
      • 6.10. 接下来读什么
    • 7.核心特性
      • 7.1. SpringApplication
      • 7.2. 外部化配置
      • 7.3.Profile配置
      • 7.4.日志记录
      • 7.5.国际化
      • 7.6 面向切面的编程
      • 7.7. JSON
      • 7.8. 任务执行与调度
      • 7.9. 单元测试
        • 7.9.1. 测试范围依赖
        • 7.9.2. 测试 Spring 应用程序
        • 7.9.3. 测试 Spring Boot 应用程序
        • 7.9.4. 测试容器
        • 7.9.5. 测试工具
      • 7.10. Docker Compose 支持
      • 7.11. 测试容器支持
      • 7.12. 创建您自己的自动配置
      • 7.13. Kotlin 支持
      • 7.14 SSL
      • 7.15.接下来要读什么
    • 8. 网络
      • 8.1. Servlet Web 应用程序
        • 8.1.1. “Spring Web MVC 框架”
        • 8.1.2. JAX-RS 和Jersey
        • 8.1.3. 嵌入式 Servlet 容器支持
      • 8.2 反应式网络应用程序
        • 8.2.1. “Spring WebFlux 框架”
        • 8.2.2. 嵌入式反应式服务器支持
        • 8.2.3. 反应式服务器资源配置
      • 8.3. 优雅关机
      • 8.4. spring安全
        • 8.4.1. MVC安全
        • 8.4.2. WebFlux 安全
        • 8.4.3. OAuth2
        • 8.4.4. SAML 2.0
      • 8.5. spring 会话
      • 8.6.GraphQL
      • 8.7. Spring HATEOAS
      • 8.8.接下来读什么
    • 9. 数据
      • 9.1. SQL数据库
      • 9.2. 使用 NoSQL 技术
      • 9.3. 接下来读什么
    • 10. 消息
      • 10.1. JMS
      • 10.2. AMQP
      • 10.3. Apache Kafka 支持
      • 10.4. Apache Pulsar 支持
      • 10.5. RSocket
      • 10.6. Spring Integration
      • 10.7. WebSockets
      • 10.8. What to Read Next
    • 11. IO
      • 11.1. 缓存
      • 11.2. Hazelcast
      • 11.3. Quartz 调度程序
      • 11.4. 发送电子邮件
      • 11.5. 验证
      • 11.6. 调用 REST 服务
      • 11.7. web services
      • 11.8. 使用 JTA 进行分布式事务
      • 11.9. 接下来读什么
    • 12. 容器镜像
  • Spring核心功能
    • 1.IOC容器和Bean简介
      • 1.2. 容器概述
      • 1.3. Bean概述
      • 1.4. 依赖项
        • 1.4.1. 依赖注入
        • 1.4.2. 详细的依赖关系和配置
        • 1.4.3. 使用depends-on
        • 1.4.4. 延迟初始化的 Bean
        • 1.4.5. 自动装配协作者
        • 1.4.6. 方法注入
    • 2. Resources
      • 2.1. 介绍
      • 2.2. Resource接口
      • 2.3. 内置Resource实现
      • 2.4. ResourceLoader接口
      • 2.5. ResourcePatternResolver接口
      • 2.6. ResourceLoaderAware接口
      • 2.7. 资源作为依赖
      • 2.8. 应用程序上下文和资源路径
    • 3. 验证、数据绑定和类型转换
      • 3.1. 使用 Spring 的 Validator 接口进行验证
      • 3.2. 将代码解析为错误消息
      • 3.3. Bean 操作和BeanWrapper
      • 3.4. spring类型转换
      • 3.5. spring字段格式
      • 3.6. 配置全局日期和时间格式
      • 3.7. Java Bean 验证
    • 4. SpEL表达式
    • 5. Spring 面向切面编程
      • 5.1. AOP 概念
      • 5.2. Spring AOP 的能力和目标
      • 5.3. AOP 代理
      • 5.4. @AspectJ 支持
        • 5.4.1. 启用@AspectJ 支持
        • 5.4.2. 声明一个切面
        • 5.4.3. 声明切入点
        • 5.4.4. 声明切点
        • 5.4.5. 切面说明
        • 5.4.6. 切面实例化模型
        • 5.4.7. AOP 示例
      • 5.5. 基于模式的 AOP 支持
      • 5.6. 选择要使用的 AOP 声明样式
      • 5.7. 混合切面类型
      • 5.8. 代理机制
      • 5.9. @AspectJ 代理的程序化创建
      • 5.10. 在 Spring 应用程序中使用 AspectJ
      • 5.11.更多资源
    • 6. Spring AOP API
      • 6.1. Spring中的切入点API
      • 6.2. Spring 中的 Advice API
      • 6.3. Spring 中的 Advisor API
      • 6.4. 使用ProxyFactoryBean创建 AOP 代理
      • 6.5. 简洁的代理定义
      • 6.6. 以编程方式创建 AOP 代理ProxyFactory
      • 6.7. 操作切面对象
      • 6.8. 使用“自动代理”工具
      • 6.9. 使用TargetSource实现
      • 6.10. 定义新的切面类型
    • 7. 空指针安全
    • 8. 数据缓冲器和编解码器
    • 9. 日志
    • 10. 附录
      • 10.1. XML 模式
      • 10.2. 自定义XML Schema
        • 10.2.1. 创作 Schema
        • 10.2.2. 编码一个NamespaceHandler
        • 10.2.3. 使用BeanDefinitionParser
        • 10.2.4. 注册处理程序和模式
        • 10.2.5. 在 Spring XML 配置中使用自定义扩展
        • 10.2.6. 更详细的例子
      • 10.3. 应用程序启动步骤
  • 使用redis实现分布式锁
  • Java 安全标准算法名称
  • JDK 9 JEP
  • JDK 10 JEP
  • 人件
    • 《人件》
    • 第一部分 管理人力资源
      • 01 此时此刻,一个项目正在走向失败
      • 02 干酪汉堡,做一个,卖一个
      • 03 维也纳在等你
      • 04 质量——如果时间允许
      • 05 再谈帕金森定律
      • 06 苦杏素
    • 第二部分 办公环境
      • 07 家具警察
      • 08 “朝九晚五在这里啥也完成不了。”
      • 09 在空间上省钱
      • 间奏曲:生产效率度量和不明飞行物
      • 10 大脑时问与身体时间
      • 11 电话
      • 12 门的回归
      • 13 采取保护步骤
    • 第三部分 正确的人
      • 14 霍恩布洛尔因素
      • 15 谈谈领导力
      • 16 雇一名杂耍演员
      • 17 与他人良好合作
      • 18 童年的终结
      • 19 在这儿很开心
      • 20 人力资本
    • 第四部分 高效团队养成
      • 21 整体大于部分之和
      • 22 黑衣团队
      • 23 团队自毁
      • 24 再谈团队自毁
      • 25 竞争
      • 26 一顿意面晚餐
      • 27 敞开和服
      • 28 团队形成的化学反应
    • 第五部分 沃土
      • 29 自我愈复系统
      • 30 与风险共舞
      • 3l 会议、独白和交流
      • 32 终极管理罪恶得主是……
      • 33 “邪恶”电邮
      • 34 让改变成为可能
      • 35 组织型学习
      • 36 构建社区
    • 第六部分 快乐地工作
      • 37 混乱与秩序
      • 38 自由电子
      • 39 霍尔加·丹斯克
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. spring boot参考文档
  2. 8. 网络

8.6.GraphQL

上一页8.5. spring 会话下一页8.7. Spring HATEOAS

最后更新于1年前

这有帮助吗?

如果您想构建 GraphQL 应用程序,可以利用 Spring Boot 对的自动配置。Spring for GraphQL 项目基于。您至少需要spring-boot-starter-graphql启动器。由于 GraphQL 与传输无关,因此您还需要在应用程序中添加一个或多个额外的启动器才能通过网络公开您的 GraphQL API:

启动器

传输方式

底层实现

spring-boot-starter-web

HTTP协议

春季MVC

spring-boot-starter-websocket

WebSocket

用于 Servlet 应用程序的 WebSocket

spring-boot-starter-webflux

HTTP、网络套接字

Spring WebFlux

spring-boot-starter-rsocket

TCP、网络套接字

Reactor Netty 上的 Spring WebFlux

8.6.1. GraphQL Schema

Spring GraphQL 应用程序在启动时需要一个定义的模式。默认情况下,您可以在src/main/resources/graphql/**下面写入“.graphqls”或“.gqls”模式文件,Spring Boot 将自动选择它们。您可以使用spring.graphql.schema.locations自定义位置并使用spring.graphql.schema.file-extensions定义文件扩展名。

如果您希望 Spring Boot 检测所有应用程序模块中的架构文件以及该位置的依赖项,您可以设置spring.graphql.schema.locations为"classpath*:graphql/**/"(注意classpath*:前缀)。

在以下部分中,我们将考虑这个示例 GraphQL 模式,定义两种类型和两个查询:

type Query {
    greeting(name: String! = "Spring"): String!
    project(slug: ID!): Project
}
​
""" A Project in the Spring portfolio """
type Project {
    """ Unique string id used in URLs """
    slug: ID!
    """ Project name """
    name: String!
    """ URL of the git repository """
    repositoryUrl: String!
    """ Current support status """
    status: ProjectStatus!
}
​
enum ProjectStatus {
    """ Actively supported by the Spring team """
    ACTIVE
    """ Supported by the community """
    COMMUNITY
    """ Prototype, not officially supported yet  """
    INCUBATING
    """ Project being retired, in maintenance mode """
    ATTIC
    """ End-Of-Lifed """
    EOL
}

8.6.2. GraphQL 运行时接线

@Controller
public class GreetingController {
​
    @QueryMapping
    public String greeting(@Argument String name) {
        return "Hello, " + name + "!";
    }
​
}

8.6.3. Querydsl 和 QueryByExample 存储库支持

Spring Data 存储库注释@GraphQlRepository并扩展以下之一:

  • QuerydslPredicateExecutor

  • ReactiveQuerydslPredicateExecutor

  • QueryByExampleExecutor

  • ReactiveQueryByExampleExecutor

由 Spring Boot 检测到并视为DataFetcher匹配顶级查询的候选者。

8.6.4. 传输

HTTP 和 WebSocket

默认情况下,GraphQL HTTP 端点位于 HTTP POST /graphql。可以使用spring.graphql.path 自定义路径。

Spring MVC 和 Spring WebFlux 的 HTTP 端点均由 @Order 为 0 的 RouterFunction bean 提供。如果您定义自己的 RouterFunction bean,则可能需要添加适当的 @Order 注释以确保它们正确排序。

GraphQL WebSocket 端点默认处于关闭状态。要启用它:

  • 对于 Servlet 应用程序,添加 WebSocket 启动器spring-boot-starter-websocket

  • 对于 WebFlux 应用程序,不需要额外的依赖项

  • 对于两者,都必须设置应用程序属性spring.graphql.websocket.path

Spring Boot 支持spring.graphql.cors.*命名空间下的多种配置属性;这是一个简短的配置示例:

spring.graphql.cors.allowed-origins=https://example.org
spring.graphql.cors.allowed-methods=GET,POST
spring.graphql.cors.max-age=1800s

RSocket

RSocket 还支持作为 WebSocket 或 TCP 之上的传输。配置 RSocket 服务器后,我们可以使用 spring.graphql.rsocket.mapping在特定路由上配置 GraphQL 处理程序。例如,将该映射配置为“graphql”意味着我们可以在使用 RSocketGraphQlClient 发送请求时将其用作路由。

Spring Boot 自动配置一个RSocketGraphQlClient.Builder<?>可以注入到组件中的 bean:

@Component
public class RSocketGraphQlClientExample {
​
    private final RSocketGraphQlClient graphQlClient;
​
    public RSocketGraphQlClientExample(RSocketGraphQlClient.Builder<?> builder) {
        this.graphQlClient = builder.tcp("example.spring.io", 8181).route("graphql").build();
    }

然后发送请求:

Mono<Book> book = this.graphQlClient.document("{ bookById(id: \"book-1\"){ id name pageCount author } }")
    .retrieve("bookById")
    .toEntity(Book.class);

8.6.5. 异常处理

8.6.6. GraphiQL 和 Schema 打印

Spring GraphQL 提供了基础设施来帮助开发人员使用或开发 GraphQL API。

Spring GraphQL 附带一个默认的 GraphiQL 页面,默认情况下在“/graphiql”处公开。该页面默认处于禁用状态,可以使用 spring.graphql.graphiql.enabled属性打开。许多公开此类页面的应用程序更喜欢自定义构建。默认实现在开发过程中非常有用,这就是为什么它在开发过程中通过spring-boot-devtools 自动公开。

您还可以选择在启用spring.graphql.schema.printer.enabled属性,以/graphql/schema文本格式公开 GraphQL Schema 。

默认情况下,模式上将允许进行如果您不希望公开有关架构的信息,可以通过设置spring.graphql.schema.introspection.enabled为 false来禁用自省。

GraphQL JavaRuntimeWiring.Builder可用于注册自定义标量类型、指令、类型解析器DataFetcher等。您可以在 Spring 配置中声明RuntimeWiringConfigurer beans 以访问RuntimeWiring.Builder. Spring Boot 检测此类 bean 并将它们添加到中。

然而,通常情况下,应用程序不会直接实现DataFetcher,而是创建。Spring Boot 将自动检测带有@Controller注释处理方法的类并将其注册为DataFetcher。以下是我们的问候语查询的@Controller类实现示例:

Spring Data 提供对 Querydsl 和 QueryByExample 存储库的支持。Spring GraphQL 可以.

Spring GraphQL 提供了模型。这对于从 HTTP 请求标头检索信息并将其设置在 GraphQL 上下文中或从同一上下文中获取信息并将其写入响应标头非常有用。使用 Spring Boot,您可以声明一个WebInterceptorbean 以将其注册到 Web 传输。

和支持 CORS(跨源资源共享)请求。CORS 是 GraphQL 应用程序 Web 配置的关键部分,可从使用不同域的浏览器访问这些应用程序。

Spring GraphQL 使应用程序能够注册一个或多个按顺序调用的 Spring DataFetcherExceptionResolver组件。异常必须解析为graphql.GraphQLError对象列表,请参阅。Spring Boot 将自动检测DataFetcherExceptionResolverbean 并将它们注册到GraphQlSource.Builder.

Spring for GraphQL
GraphQL Java
字段自省,因为这是 GraphiQL 等工具所必需的。
GraphQlSource builder
带注释的控制器
将 Querydsl 和 QueryByExample 存储库配置为DataFetcher
Web 拦截
Spring MVC
Spring WebFlux
Spring GraphQL 异常处理文档