我正在探索GraphQL,并想知道是否有任何重命名响应字段的方法,例如我有一个带有这些字段的POJO
class POJO {
Long id;
String name;
}
GraphQL查询:
type POJO {
id: Long
name: String
}
我的回答是这样的
{
"POJO" {
"id": 123,
"name": "abc"
}
}
我可以将name字段重命名为userName,以便我的响应低于
{
"POJO" {
"id": 123,
"userName": "abc"
}
}
答案 0 :(得分:20)
您可以使用GraphQL Aliases修改JSON响应中的各个键。
如果这是您的原始查询
query {
POJO {
id
name
}
}
您可以为字段userName
引入GraphQL别名name
,如下所示:
query {
POJO {
id
userName: name
}
}
您还可以使用GraphQL别名在同一GraphQL操作中使用the same query or mutation field multiple times。使用字段参数时,这一点特别有趣:
query {
first: POJO(first: 1) {
id
name
}
second: POJO(first: 1, skip: 1) {
id
name
}
}
答案 1 :(得分:0)
看起来GraphQLName注释可以提供帮助。
来自documentation的示例: "此外,@ GrapQLName可用于覆盖字段名称。您可以使用@GraphQLDescription来设置描述。"
这些也可以用于字段参数:
public String field(@GraphQLName("val") String value) {
return value;
}
答案 2 :(得分:0)
问题是:您是如何创建架构的?? Java和GraphQL类型之间没有内在联系 - 除非您将它们关联起来,否则它们完全不相关。因此,您可以在架构中以任何方式命名字段,并创建一个从任何位置获取值的解析器(DataFetcher
)(因此也可以是任何POJO字段)。
如果您正在使用工具从Java类型(graphql-java-annotations,graphql-spqr等)生成模式,那么使用该工具的工具来驱动映射。上述两个工具都允许通过注释自定义映射。 GraphQL-SPQR也可以通过外部配置实现相同的功能。
如果您进一步澄清您的问题,我将能够提供更准确的答案。
答案 3 :(得分: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”的字段名称。