[英]Spring Boot with GraphQL server not starting
type Person {
id: ID
name: String!
contact: Contact
}
type Query {
countPersons: Long!
findByName(name: String!): [Person]!
findAllPerson: [Person]!
}
type Contact {
id: ID
emailId: String
mobileNumber: String!
}
extend type Query {
findAllContact: [Contact]!
countContacts: Long!
findByMobileNumber(mobileNumber: String!): [Contact]!
findByEmailId(emailId: String!): [Contact]!
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "persons")
public class Person extends BaseAbstractEntity {
@Column(name="person_name", nullable = false)
private String name;
@OneToOne(fetch = javax.persistence.FetchType.LAZY)
@JoinColumn(name = "contact_id", referencedColumnName = "id")
private Contact contact;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "contacts")
public class Contact extends BaseAbstractEntity {
@Column(name="contact_email_id")
private String emailId;
@Column(name="contact_mobile_number", nullable = false)
private String mobileNumber;
@OneToOne(mappedBy = "contact")
private Person person;
}
public class Query implements GraphQLQueryResolver {
private final PersonRepository personRepository;
private final ContactRepository contactRepository;
public Query(PersonRepository personRepository, ContactRepository contactRepository) {
this.personRepository = personRepository;
this.contactRepository = contactRepository;
}
public Iterable<Person> findAllPerson() {
return personRepository.findAll();
}
}
Getting error on starting server:在启动服务器时出错:
com.coxautodev.graphql.tools.SchemaClassScannerError: Unable to match type definition (NonNullType{type=ListType{type=TypeName{name='Person'}}}) with java type (class com.demo.graphql.entities.Person): Java class is not a List or generic type information was lost: class com.demo.graphql.entities.Person com.coxautodev.graphql.tools.SchemaClassScannerError:无法将类型定义(NonNullType{type=ListType{type=TypeName{name='Person'}}})与 Java 类型(类 com.demo.graphql.entities.Person)匹配: Java class is not a List or generic type information was lost: class com.demo.graphql.entities.Person
The application starts after commenting out findByName
and findAllPersonfindAllPerson
in query:应用程序在查询中注释掉findByName
和findAllPersonfindAllPerson
后启动:
type Query {
countPersons: Long!
# findByName(name: String!): [Person]!
# findAllPerson: [Person]!
}
I think the issue is with [Person]
in query response which is a list of person.我认为问题在于查询响应中的[Person]
,这是一个人员列表。
Link to application: https://github.com/shubham-v/spring-boot-graphql-demo/应用链接: https : //github.com/shubham-v/spring-boot-graphql-demo/
Looking in the shared repo:查看共享仓库:
public Person findByName(String name) {
return personRepository.findByName(name);
}
The resolver is returning a single Person
class object but the schema expects a list of Person
.解析器正在返回一个Person
类对象,但架构需要一个Person
列表。
Try changing the schema to:尝试将架构更改为:
findByName(name: String!): Person!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.