我的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;
}
}
使用GraphiQL(假设字段有效(:
{
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返回非泛型Lists或Maps?
据我所知,@GraphQLQuery需要添加到getter中。
public class MyObject {
private List myList;
@GraphQLQuery(name = "myList")
public List getMyList() {
return myList;
}
}
正如你提到的,你可能无法改变这一点。一种方法可能是创建一个包装器对象,因此您不返回MyObject,而是返回MyWrapperObject,它在构造函数中使用MyObject,并具有SPQR兼容的getter来访问可变对象。或者还有@GraphQLContext,您可以使用它添加(不更改类(新方法。这些方法可以与SPQR兼容。
希望能帮助