46

我正在探索 GraphQL 并想知道是否有任何方法可以重命名响应字段,例如我有一个带有这些字段的 POJO

class POJO {
  Long id;
  String name;
}

GraphQL 查询:

type POJO {
  id: Long
  name: String
}

我的回答是这样的

{
  "POJO" {
    "id": 123,
    "name": "abc"
  }
}

我可以将名称字段重命名为 userName 之类的名称,以便我的回复如下

{
  "POJO" {
    "id": 123,
    "userName": "abc"
  }
}
4

4 回答 4

101

您可以使用GraphQL 别名来修改 JSON 响应中的各个键。

如果这是您的原始查询

query {
  POJO {
    id
    name
  }
}

userName您可以为该字段引入 GraphQL 别名,name如下所示:

query {
  POJO {
    id
    userName: name
  }
}

您还可以使用 GraphQL 别名在同一个 GraphQL 操作中多次使用同一个查询或突变字段。当使用字段参数时,这个 get 特别有趣:

query {
  first: POJO(first: 1) {
    id
    name
  }

  second: POJO(first: 1, skip: 1) {
    id
    name
  }
}
于 2017-12-19T13:39:36.543 回答
1

问题是:您首先是如何创建模式的?Java 和 GraphQL 类型之间没有内在联系——除非你将它们关联起来,否则它们是完全不相关的。因此,您可以在模式中以任何您想要的方式命名字段,并制作一个DataFetcher从任何地方获取值的解析器 ( )(因此也可以是任何 POJO 字段)。

如果您使用工具从 Java 类型(graphql-java-annotationsgraphql-spqr等)生成模式,则使用该工具的工具来驱动映射。提到的两个工具都允许通过注释自定义映射。GraphQL-SPQR 也可以通过外部配置实现相同的功能。

如果您进一步澄清您的问题,我将能够给出更准确的答案。

于 2018-01-26T00:05:33.067 回答
0

看起来 GraphQLName 注释可以提供帮助。

文档中的示例:“此外,@GraphQLName 可用于覆盖字段名称。您可以使用 @GraphQLDescription 设置描述。”

这些也可用于字段参数:

public String field(@GraphQLName("val") String value) {
  return value;
}
于 2017-12-25T11:57:02.477 回答
0

我知道这个问题很老,但以下代码用于重命名该字段:

public class ProductReviewType: ObjectGraphType<ProductReview>
{
    public ProductReviewType()
    {
        Field(x => x.ProductReviewId, type: typeof(IdGraphType)).Description("some desc here");
        Field(x => x.ProductId).Description("some desc here");
        Field("reviewername", x => x.ReviewerName).Description("some desc here");            
        Field("reviewdate",x => x.ReviewDate).Description("some desc here");
        Field("emailaddress", x => x.EmailAddress).Description("some desc here");
        Field("rating", x => x.Rating).Description("some desc here");
        Field("comments",x => x.Comments).Description("some desc here");
        Field("modifieddate", x => x.ModifiedDate).Description("some desc here");
    }

}

在上面的代码中,modifieddate 将是属性“ModifiedDate”的字段名称。

于 2020-04-16T11:32:36.697 回答