代码之家  ›  专栏  ›  技术社区  ›  Shubham

com.coxautodev.graphql.tools。SchemaClassScanner错误:无法匹配类型定义(NonNullType{type=ListType{type=TypeName{name=“…”}})=

  •  0
  • Shubham  · 技术社区  · 5 年前
    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();
        }
    }
    

    启动服务器时出错:

    com.coxautodev.graphql.tools。SchemaClassScanner错误:无法将类型定义(NonNullType{type=ListType{type=TypeName{name='Person'}})与java类型(class.com.demo.graphql.entities.Person)匹配:java类不是List或泛型类型信息丢失:class.com.demo.graphql.entities。人

    评论结束后,应用程序开始运行 findByName findAllPersonfindAllPerson 在查询中:

    type Query {
        countPersons: Long!
        # findByName(name: String!): [Person]!
        # findAllPerson: [Person]!
    }
    

    我认为问题在于 [Person] 在查询响应中,它是一个人的列表。

    应用程序链接: https://github.com/shubham-v/spring-boot-graphql-demo/

    0 回复  |  直到 5 年前
        1
  •  1
  •   Mat G    5 年前

    查看共享仓库:

    public Person findByName(String name) {
        return personRepository.findByName(name);
    }
    

    解析器正在返回单个 Person 类对象,但架构需要一个列表 .

    尝试将架构更改为:

    findByName(name: String!): Person!