[英]GraphQL and Java
我是GraphQL的新手。 我正在嘗試使用graphql-java在Java中為非常簡單的架構實現服務器端代碼。 但是,我收到“警告:查詢未能通過驗證:'{articles}'”和一個NullPointerException
(這很有意義)。 如何從簡單查詢中獲得結果? 我究竟做錯了什么? 有趣的是,當我將Query
的articles
類型更改為String
(如下所示),它可以工作!
type Query {
articles: String
}
這是我的實際架構:
schema {
query: Query
}
type Query {
articles: [Article]
}
type Article {
id: Int!
title: String
text: String
}
這是我的Java bean(我使用過Lombok批注):
package org.code.beans;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Article {
private int id;
private String title;
private String text;
}
存儲庫類:
package org.code.repositories;
import java.util.ArrayList;
import java.util.List;
import org.code.beans.Article;
public class ArticleRepository {
private List<Article> articles;
public ArticleRepository() {
this.articles = new ArrayList<>();
}
public void addArticle(Article article) {
articles.add(article);
}
public List<Article> findAll() {
return articles;
}
public Article findOne(int id) {
return articles.stream()
.filter(article -> article.getId() == id)
.findFirst()
.orElse(null);
}
}
包含GraphQL代碼的可執行Test類:
package org.code.tests;
import java.io.File;
import java.util.List;
import org.code.beans.Article;
import org.code.repositories.ArticleRepository;
import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;
public class Test {
public static void main(String[] args) {
ArticleRepository articleRepository = new ArticleRepository();
Article article1 = new Article(1, "Article 1", "Text 1");
Article article2 = new Article(2, "Article 2", "Text 2");
articleRepository.addArticle(article1);
articleRepository.addArticle(article2);
SchemaParser parser = new SchemaParser();
TypeDefinitionRegistry registry = parser.parse(new File("./src/org/code/resources/schema.graphql"));
DataFetcher<List<Article>> articlesDataFetcher = new DataFetcher<List<Article>>() {
@Override
public List<Article> get(DataFetchingEnvironment env) throws Exception {
return articleRepository.findAll();
}};
RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring()
.type("Query", wiring -> wiring.dataFetcher("articles", articlesDataFetcher))
.build();
SchemaGenerator generator = new SchemaGenerator();
GraphQLSchema schema = generator.makeExecutableSchema(registry, runtimeWiring);
GraphQL graphQl = GraphQL.newGraphQL(schema).build();
ExecutionResult result = graphQl.execute("{articles}");
System.out.println(result.getData().toString());
}
}
您不允許查詢以對象類型“結尾”。 當查詢選擇包含對象列表的articles
,但是您必須從這些對象中至少選擇一個字段。 您可以嘗試
graphQl.execute("{ articles { id title text } }")
您可以嘗試以下操作:
type Query {
articles(id: Int!, title: String, text: String): [Article]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.