当前位置: 首页 > 编程笔记 >

Spring Boot 集成 GraphQL

文英达
2023-03-14
本文向大家介绍Spring Boot 集成 GraphQL,包括了Spring Boot 集成 GraphQL的使用技巧和注意事项,需要的朋友参考一下

GraphQL 是什么这里我们就不做描述,想了解的可以直接点击链接查阅。

我们直接说明如何在 Spring Boot 框架中使用 GraphQL。

1 引入依赖

只需要在 pom.xml 引入一个依赖就可以了:

<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>11.0.0</version>
</dependency>

这个依赖已经包含了 graphql-java 和 graphql-java-tools 等组件,不需要额外引用其他依赖,配置也很简单,而且目前持续在更新。

2 配置

打开 application.yml 文件,加入如下配置:

graphql:
  servlet:
    enabled: true
    mapping: /graphql
    corsEnabled: false

如果只是刚开始测试,这里要一定要设置 corsEnabled: false 关闭跨域,不然无法请求。实际中再根据需要开关跨域配置。

更多配置请参考《Enable GraphQL Servlet》。

3 编写schema文件

创建文件:src/main/resources/graphql/schema.graphqls,注意文件后缀必须是 .graphqls。内容:

type Query {
    questionById(id: ID): Question
}

type Question {
    id: ID
    title: String
    content: String
    userId: Int
}
这了定义了一个查询,名为questionById,其参数一个ID类型的id。

4 编写Java代码

创建文件:src/main/java/org/termi/community/resolver/Query.java,内容:

package org.termi.community.resolver;

import graphql.kickstart.tools.GraphQLQueryResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.termi.community.model.Question;
import org.termi.community.service.question.QuestionService;

@Component
public class Query implements GraphQLQueryResolver {
    @Autowired
    private QuestionService questionService;

    public Question getQuestionById(long id) {
        return questionService.selectById(id);
    }
}

这里的 getQuestionById 对应 schema 文件中的 questionById这个Query。

同时,我们要查询数据,所以注入了 QuestionService,具体的查询功能需要自己实现,必须要返回一个Question对象。

package org.termi.community.model;

@Data
public class Question {
    private Long id;
    private String title;
    private String content;
    private Integer userId;
}

5 启动测试

启动 Spring Boot。

在 Chrome 浏览器中安装 GraphQL Playground for Chrome 插件,输入以下内容,点中间的执行按钮就可以看到结果了。

6 增加 playground 组件(可选)

当然,我们也可以在项目中加入 playground 依赖,这样就可以像 Swagger 一样,只要启动项目,就能进行测试了。

首先,pom.xml 中加入依赖:

<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>playground-spring-boot-starter</artifactId>
<version>11.0.0</version>
</dependency>

然后配置 application.yml,静态文件使用 CDN方式:

graphql:
  # 其他配置
  playground:
    cdn:
      enabled: true
      version: latest

再重启Spring Boot,浏览器输入:http://localhost:8080/playground,就能看到和GraphQL Playground for Chrome 插件一模一样的界面了。

拥有类似作用的还有 graphiql 和 voyager,具体可参项目介绍的《Documentation》。

参考资料:

  • graphql-java-kickstart/graphql-spring-boot:https://github.com/graphql-java-kickstart/graphql-spring-boot
  • graphql-java使用记录:https://segmentfault.com/a/1190000020309793
 类似资料:
  • 本文向大家介绍SpringBoot集成kaptcha验证码,包括了SpringBoot集成kaptcha验证码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了SpringBoot集成kaptcha验证码的具体代码,供大家参考,具体内容如下 1.kaptcha相关介绍 Kaptcha是一个基于SimpleCaptcha的验证码开源项目。 2.集成方案 ①pom.xml中配置依赖 ②配置

  • 本文向大家介绍详解SpringBoot之集成Spring AOP,包括了详解SpringBoot之集成Spring AOP的使用技巧和注意事项,需要的朋友参考一下 在开始之前,我们先把需要的jar包添加到工程里。新增Maven依赖如下:  接下来,我们进入正题。这里的涉及的通知类型有:前置通知、后置最终通知、后置返回通知、后置异常通知、环绕通知,下面我们就具体的来看一下怎么在SpringBoot中

  • 本文向大家介绍SpringBoot集成SpringMVC的方法示例,包括了SpringBoot集成SpringMVC的方法示例的使用技巧和注意事项,需要的朋友参考一下 Spring MVC是一款优秀的、基于MVC思想的应用框架,它是Spring的一个子框架。是当前最优秀的MVC框架。 Spring Boot整合Spring MVC只需在pom.xml中引入 配置Spring MVC applica

  • 本文向大家介绍详解SpringBoot+Dubbo集成ELK实战,包括了详解SpringBoot+Dubbo集成ELK实战的使用技巧和注意事项,需要的朋友参考一下 前言 一直以来,日志始终伴随着我们的开发和运维过程。当系统出现了Bug,往往就是通过Xshell连接到服务器,定位到日志文件,一点点排查问题来源。 随着互联网的快速发展,我们的系统越来越庞大。依赖肉眼分析日志文件来排查问题的方式渐渐凸显

  • 本文向大家介绍springboot集成mqtt的实践开发,包括了springboot集成mqtt的实践开发的使用技巧和注意事项,需要的朋友参考一下 序 MQTT(Message Queuing Telemetry Transport)是基于二进制消息的发布/订阅编程模式的消息协议,非常适合需要低功耗和网络带宽有限的IoT场景。这里简单介绍一下如何在springboot中集成。 maven 配置cl

  • 本文向大家介绍springboot集成activemq的实例代码,包括了springboot集成activemq的实例代码的使用技巧和注意事项,需要的朋友参考一下 ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JM

  • 我正在使用一个带有spring boot 2.0.0.rc1的多项目分级器。我的子项目之一是SpringBoot应用程序,其中包含了我的集成测试。 集成测试用WebEnvironment.random_port标记为@springboottest。由于未解析的依赖关系(在另一个子项目中声明的服务,的同级),测试失败,使用了gradle命令行,但在Eclipse IDE中成功。 如果有人有主意?如何