简体   繁体   English

带有 GraphQL 服务器的 Spring Boot 未启动

[英]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:应用程序在查询中注释掉findByNamefindAllPersonfindAllPerson后启动:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM