赞
踩
GraphQL是一种用于 API 的查询语言,也是一个基于服务端的运行引擎。GraphQL 提供了一套完整的规范和描述用于查询 API,服务端能够根据客户端的需要自动适配并返回准确的数据。
创建一个mavan项目
在pom文件中导入GraphQL的依赖,
<dependencies>
<!--graphql-spring-boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<!-- spring-boot web服务的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在application.yaml文件中添加GraphQL相关的配置
server:
port: 8889
spring:
graphql:
graphiql:
enabled: true
path: /graphql
schema:
locations: classpath:graphql/
接口代码编写
@Controller
public class TestController {
/**
* 经典 hollo graphql
*/
@QueryMapping
public String hello(){
return "hello graphql";
}
/**
* 查询学生列表
*/
@QueryMapping
public List<Student> getStudent(@Argument("flag") String flag){
//此处的业务操作就不写了,直接返回Student对象集合
ArrayList<Student> list = new ArrayList<>();
list.add(new Student(1,"zmx"));
list.add(new Student(2,"cyn"));
return list;
}
/**
* 修改学生信息
* @param Student
* @return
*/
@MutationMapping
public String updateStudent(@Argument StudentDTO Student){//@Argument 注解可以指定参数名
//执行修改逻辑,这里就不写了
return "success!";
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private int id;
private String name;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentDTO {
private int id;
private String name;
}
@ComponentScan("org.example.graphql")
@SpringBootApplication()
public class PartApplication {
public static void main(String[] args) {
//如果启动类启动失败,可以输出异常信息,查看原因
try {
SpringApplication.run(PartApplication.class, args);
} catch (Exception e) {
System.out.println(e.toString());
}
}
/**
* 注入WebGraphQlInterceptor Bean
* @return
*/
@Bean
public WebGraphQlInterceptor interceptor() {
return (webInput, interceptorChain) ->
// Switch threads to prove ThreadLocal context propagation works
interceptorChain
.next(webInput)
.timeout(Duration.ofMinutes(5),
Mono.error(new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE)));
}
}
在resource文件夹下创建graphql文件夹(与配置文件中的schma-locations对应),在其中编写.graphqls文件
代码目录
root.graphqls的内容
schema {
query: Query
mutation: Mutation
}
type Mutation{
}
type Query{
}
test.graphqls的内容
extend type Query{
hello:String
getStudent(flag:String):[Student]
}
extend type Mutation {
updateStudent(studentDto:StudentDTO):String
}
type Student{
id:Int
name:String
}
input StudentDTO{
id:Int
name:String
}
到此代码,测试编写完成,可以启动项目测试一下接口了。
如图所示,我们页面左侧编写GraphQL请求,中间返回请求得到的数据,最后侧我们可以看到自己编写的GraphQL文档。
{
getStudent(flag: "1") {
id
name
}
hello
}
{
getStudent(flag: "1") {
id
}
hello
}
mutation{
updateStudent(studentDto:{
id:1
name:"zmx"}
)
}
查询
修改
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。