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 type
和 input
是两个不同的东西。您不能将 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
}
你也可以看看这个问题:
使用 -
在 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 type
和 input
是两个不同的东西。您不能将 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
}
你也可以看看这个问题: