我的GraphQL模式是:
//Schema generated from query classes
GraphQLSchema schema = new GraphQLSchemaGenerator()
.withBasePackages("com.blah.blah")
.withOperationBuilder(new DefaultOperationBuilder(DefaultOperationBuilder.TypeInference.UNLIMITED))
.withOutputConverters((config, defaults) -> defaults.drop(ObjectScalarAdapter.class))
.withResolverBuilders(new AnnotatedResolverBuilder())
.withOperationsFromSingleton(myObjectQuery)
.withTypeTransformer(new DefaultTypeTransformer(true, true))
.withValueMapperFactory(new JacksonValueMapperFactory())
.generate();
我定义了一个GraphQLQuery:
@GraphQLQuery(name = "getMyObject")
public MyObject getMyObject() {}
返回“ MyObject”类
MyObject类不使用泛型,并且定义如下(我无法更改),尽管我知道 myList 包含类型为 MyListType 的对象:
public class MyObject {
private List myList;
public List getMyList() {
return myList;
}
}
使用图 i QL(假定字段有效):
{
getMyObject() {
id
myList{
myListTypeId
}
}
}
结果:
{
"errors": [
{
"message": "Validation error of type SubSelectionNotAllowed: Sub selection not allowed on leaf type null of field myList@ 'getMyObject/myList'",
"locations": [
{
"line": 4,
"column": 5
}
]
}
]
}
如何解决此错误?我添加了一个方面,将getMylist()的返回结果强制为List,但显然对验证步骤没有影响。
问题是: 如何配置架构以允许返回非泛型列表或映射的getter?
答案 0 :(得分:0)
据我了解,@ GraphQLQuery需要添加到吸气剂中。
public class MyObject {
private List myList;
@GraphQLQuery(name = "myList")
public List getMyList() {
return myList;
}
}
您提到过,您可能无法更改此设置。一种方法可能是创建一个包装对象,而不是返回MyObject,而是返回MyWrapperObject,该对象在构造函数中使用MyObject并具有与SPQR兼容的吸气剂来访问变量。 另外,还有@GraphQLContext,可用于添加(而不更改类)新方法。这些方法可以与SPQR兼容。
希望有帮助