GraphQL SPQR-没有泛型的列表出错



我的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兼容。

希望能帮助

相关内容

  • 没有找到相关文章

最新更新