GraphQL - SchemaError:

GraphQL - SchemaError:

使用 -

在 java 中构建微服务

spring-引导版本 2.2.6.RELEASE graphql-spring-boot-starter 版本 5.0.2

尝试使用 graphql 突变在 MongoDB 中持久保存记录,我成功地通过单个对象持久保存,如下所示 -

type ParentElement {
  id: ID!
  type: String
  child: String
}

但是在尝试使用嵌套对象时,我看到以下错误 -

原因:com.coxautodev.graphql.tools.SchemaError:预期类型 'ChildElement' 是 GraphQLInputType,但它不是!类型是否只允许对象类型错误地用作输入类型,反之亦然?

我的Schema如下-

schema {
    query: Query
    mutation: Mutation
}

type ChildElement {
  make: String
  model: String
}

type ParentElement {
  id: ID!
  type: String
  child: ChildElement
}

type Query {
    findAllElements: [ParentElement]
}

type Mutation {
    createElement(id: String, type: String, child: ChildElement): ParentElement
}

Pojo 类&变异如下-

@Document(collection="custom_element")
public class ParentElement {    
    private String id;
    private String type;
    private ChildElement child;
}

public class ChildElement {
    private String make;
    private String model;
}

@Component
public class ElementMutation implements GraphQLMutationResolver {
    private ElementRepository elementRepository;
    public ElementMutation(ElementRepository elementRepository) {
        this.elementRepository = elementRepository;
    }
    public ParentElement createElement(String id, String type, ChildElement child) {        
        ParentElement element = new ParentElement()

        elementRepository.save(element);
        return element;
    }
}

@Component
public class ElementQuery implements GraphQLQueryResolver {
    private ElementRepository elementRepository;
    @Autowired
    public ElementQuery(ElementRepository elementRepository) {
        this.elementRepository = elementRepository;
    }
    public Iterable<ParentElement> findAllElements() {
        return elementRepository.findAll();
    }
}

@Repository
public interface ElementRepository extends MongoRepository<ParentElement, String>{
}

我想在 mongo 数据库中保存以下 json 表示 -

{
    "id": "custom_id",
    "type": "custom_type",
    "child": {
      "make": "custom_make",
      "model": "Toyota V6",
     }
}

我尝试了几件事,但在启动服务器时总是遇到同样的异常。上面的json是一个简单的表示。我想保存更复杂的一个,与在线提供的其他示例的不同之处在于,我不想为子元素创建单独的 mongo 对象,如在线提供的 Book-Author 示例所示。

Graphql typeinput 是两个不同的东西。您不能将 type 用作突变 input。这正是异常的含义:Expected type 'ChildElement' to be a GraphQLInputType, but it wasn't,库期待 input 但发现了其他东西(对象类型)。

要解决该问题,请创建一个子输入:

input ChildInput {
  make: String
  model: String
}

type Mutation {
    createElement(id: String, type: String, child: ChildInput): ParentElement
}

你也可以看看这个问题: