springboot整合graphql
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
创建graphqls
需要在resources下创建graphql
文件夹,然后在此文件夹下创建graphqls文件
type Query {
bookById(id:ID):Book
}
type Book {
id:ID
name:String
pageCount:Int
author: Author
}
type Author {
id :ID
firstName:String
lastName:String
}
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private String id;
private String name;
private String authorId;
private int pageCount;
//测试数据
private static List<Book> bookList = Arrays.asList(
new Book("1","java","1",1),
new Book("2","c","2",2),
new Book("3","python","3",3)
);
public static Book getBookById(String id) {
for (Book book : bookList) {
if (book.getId().equals(id)) {
return book;
}
}
return null;
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Author {
private String id;
private String firstName;
private String lastName;
//测试数据
private static final List<Author> authorList = Arrays.asList(
new Author("1","fname1","lname1"),
new Author("2","fname2","lname2"),
new Author("3","fname3","lname3")
);
public static Author getById(String authorId) {
return authorList.stream()
.filter(author -> author.id.equals(authorId))
.findFirst()
.orElse(null);
}
}
controller
@Controller
public class BookController {
@QueryMapping
public Book bookById(@Argument String id) {
return Book.getBookById(id);
}
@SchemaMapping
public Author author(Book book) {
return Author.getById(book.getAuthorId());
}
}
测试
访问本地http://localhost:8080/graphiql
地址即可进行测试