springboot整合graphql

springboot整合graphql

起男 58 2025-04-11

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地址即可进行测试