GraphQL-SPQR-错误列表,没有泛型

时间:2018-07-26 14:05:37

标签: 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;
    }
}

使用图 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?

1 个答案:

答案 0 :(得分:0)

据我了解,@ GraphQLQuery需要添加到吸气剂中。

public class MyObject {
    private List myList;
    @GraphQLQuery(name = "myList")
    public List getMyList() {
        return myList;
    }
}

您提到过,您可能无法更改此设置。一种方法可能是创建一个包装对象,而不是返回MyObject,而是返回MyWrapperObject,该对象在构造函数中使用MyObject并具有与SPQR兼容的吸气剂来访问变量。 另外,还有@GraphQLContext,可用于添加(而不更改类)新方法。这些方法可以与SPQR兼容。

希望有帮助