java - GraphQL:无法匹配类型定义(TypeName{name='Long'})
问题描述
我只是在使用 Springboot 学习 graphql,并且正在尝试此链接https://bezkoder.com/spring-boot-graphql-mysql-jpa/中的示例。现在我遇到了一个问题,无法理解它为什么会抛出这个错误。
有人可以帮我指出我犯了什么错误吗?
错误: graphql.kickstart.tools.SchemaClassScannerError: Unable to match type definition (TypeName{name='Long'}) with java type (class java.lang.Long): No TypeDefinition for type name Long
作者.graphqls
type Author {
id: ID!
name: String!
age: Int
}
# Root
type Query {
findAuthorById(id: Long): Author!
findAllAuthors: [Author]!
countAuthors: Long!
}
# Root
type Mutation {
createAuthor(name: String!, age: Int): Author!
}
作者.java
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "age")
private Integer age;
解决方案
GraphQL 规范仅将 Int、Float、String、Boolean 和 ID 指定为原始类型(也称为“标量”)。但是,它确实允许扩展这组标量类型。您正在使用的 GraphQL 规范的实现,GraphQL Java,默认情况下不提供Long
标量类型。您可以设置自己的,但在这种情况下,我认为使用graphql-java-extended-scalars包会更容易。这很容易设置。请注意,它提供了一个GraphQLLong
标量类型 def,它表示java.lang.Long
. 如果您不想为此类型使用名称“GraphQLLong”,您可以像这样给它起别名:
GraphQLScalarType longScalar =
ExtendedScalars.newAliasedScalar('Long')
.aliasedScalar(ExtendedScalars.GraphQLLong)
.build()
请参阅 graphql-java-extended-scalars 的文档,并深入研究源代码以了解它们如何设置标量。
推荐阅读
- sql - SQL 按组汇总值
- excel - 将数据从网站提取到 .csv 文件
- html - 控制其父级或兄弟级高度的 Html 元素
- c# - 如何从字符串中提取标记?
- java - 在java中返回有一些问题
- mysql - 使用 sinon 对带有回调的 mysql 查询进行单元测试
- c - 警告:格式 '%s' 需要匹配的 'char *' 参数 [-Wformat=]
- python - 在 Python Flatten() 中展平列表列表不起作用 可能的生成器问题
- c# - 为什么要更改 file2 的状态,file1 在 VSTO 中添加 word 的 Ribbon 也会更改
- c - 为什么我的 printf 不能接收我的用户输入?