【发布时间】:2020-03-03 23:02:00
【问题描述】:
我想将 Graphql 集成到我的项目中。我在(几个)教程之后开始了一个新的 Spring Boot 项目,但它们都没有工作:graphql 端点没有出现,似乎未检测到 graphqls 文件?
我的项目是一个 Maven 项目,具有以下依赖项:
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.10.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>5.6.1</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.10.0</version>
<scope>runtime</scope>
</dependency>
为了保持帖子简短,我尝试只放置相关依赖项,避免其他依赖项(Lombok、jpa 等...)
还有我的 graphqls 文件(在资源文件夹中):
type Vehicle {
id: ID!,
type: String,
modelCode: String,
brandName: String,
launchDate: String
}
type Query {
vehicles(count: Int):[Vehicle]
vehicle(id: ID):Vehicle
}
type Mutation {
createVehicle(type: String!, modelCode: String!, brandName: String, launchDate: String):Vehicle
}
根据文档,应该创建 graphql 端点,因为我有一个 graphql-spring-boot-starter 依赖项和一个模式,它将使用我的 vehicle.graphqls 文件(以及 graphql-java-tools 依赖项)自动创建
如果将 graphql-spring-boot-starter 作为依赖项添加到启动应用程序并且应用程序中存在 GraphQLSchema bean,则可以在 /graphql 访问 servlet [...] 当在类路径中找到支持的 graphql-java 模式库时,也可以自动创建 GraphQL 模式。
我使 graphql 端点出现的唯一方法是以编程方式创建模式(我想避免这种情况):
@Bean
GraphQLSchema schema() {
return GraphQLSchema.newSchema()
.query(GraphQLObjectType.newObject()
.name("query")
.field(field -> field
.name("test")
.type(Scalars.GraphQLString)
.dataFetcher(environment -> "response")
)
.build())
.build();
}
我想我错过了一些东西,但经过一天的尝试,我现在卡住了,我看不出我的错误是什么。
【问题讨论】:
-
您不需要(完全)手动构建架构,但您确实需要构建它。由于您已经定义了架构,您只需要使用它来构建端点。有关详细信息,请参阅this tutorial。
-
我看不出我所做的和你提到的教程之间的区别,原理是一样的。在 json 文件中定义了一个模式,并为搜索实现了类(在我的例子中为
GraphQLResolver)。但由于我使用com.graphql-java-kickstart.graphql-java-tool,我不应该像com.graphql-java.graphql-java那样编写这个GraphQLProvider。但我可能错过了你的意思? -
好吧,如果
kickstart包应该为您处理,我想不会。 -
尝试设置此属性:
graphql.servlet.enabled=true -
我也面临同样的问题......你能解决这个问题吗?
标签: java spring-boot graphql graphql-java