【问题标题】:Create a List<A> as GraphQLObjectType创建一个 List<A> 作为 GraphQLObjectType
【发布时间】:2017-04-13 16:29:10
【问题描述】:

我想从我的 GraphQLDatafetcher 中返回一个类 A 对象的列表。我知道我可以像这样返回一个A

GraphQLObjectType a = GraphQLAnnotations.object(A.class);
...
GraphQLFieldDefinition.newFieldDefinition().type(a); // omitted boilerplate from query object

现在,我想返回A 的列表,所以我尝试了这样的操作:

GraphQLObjectType aList = GraphQLAnnotations.object(List.class);
...
GraphQLFieldDefinition.newFieldDefinition().type(aList); // omitted 

还有这个:

GraphQLObjectType aList = GraphQLAnnotations.object(new GraphQLList(A.class));
...
GraphQLFieldDefinition.newFieldDefinition().type(aList); // omitted 

A 类的注释如下:

@GraphQLType
public class A {...}

第一次尝试返回 null,第二次尝试使用 GraphQLList cannot be applied to java.lang.Class&lt;A&gt; 编译失败

一种解决方法是创建一个包含列表的包装器对象,但对我来说这似乎是一个丑陋的 hack。如何使用GraphQL java 2.3.0 返回A 列表?

【问题讨论】:

    标签: java graphql-java


    【解决方案1】:

    列表类型不是对象类型的子类型,因此您永远无法创建表示列表的对象类型。不过,这两种类型都是输出类型(list 也是输入类型)。这应该是您所需要的。

    GraphQLObjectType a = GraphQLAnnotations.object(A.class);
    GraphQLOutputType listOfA = new GraphQLList(a);
    

    然后您可以将此类型用作字段类型,就像 GraphQLObjectType 一样:

    GraphQLFieldDefinition.newFieldDefinition().type(listOfA);
    

    【讨论】:

    • 谢谢你。我很好奇如何获得变量typeRepresentingA?我尝试在getName() 方法中实现GraphQLType 并返回A.class.getName()
    • @span 但是……你已经有了。我修改了我的例子。我对graphql-java-annotations不是很熟悉,所以我只是复制了你的代码。
    • 啊,我明白了!不错!
    【解决方案2】:

    我认为您需要执行以下操作:

    GraphQLFieldDefinition.newFieldDefinition().type(new GraphQLList(A));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2010-12-06
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多