【问题标题】:Spring Boot with GraphQL server not starting带有 GraphQL 服务器的 Spring Boot 未启动
【发布时间】:2020-12-25 18:32:31
【问题描述】:
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.SchemaClassScannerError: 无法将类型定义 (NonNullType{type=ListType{type=TypeName{name='Person'}}}) 与 java 类型(com.demo.graphql.entities 类.Person):Java 类不是 List 或泛型类型信息丢失:com.demo.graphql.entities.Person 类

应用程序在查询中注释掉findByNamefindAllPersonfindAllPerson 后启动:

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

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

申请链接:https://github.com/shubham-v/spring-boot-graphql-demo/

【问题讨论】:

    标签: java spring-boot graphql


    【解决方案1】:

    查看共享仓库:

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

    解析器返回单个 Person 类对象,但架构需要 Person 的列表。

    尝试将架构更改为:

    findByName(name: String!): Person!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 2015-03-30
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多