私は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"
}
}
GraphQL Aliases を使用して、JSON応答の個々のキーを変更できます。
これが元のクエリの場合
query {
POJO {
id
name
}
}
次のように、フィールドuserName
にGraphQLエイリアスname
を導入できます。
query {
POJO {
id
userName: name
}
}
GraphQLエイリアスを使用して、同じGraphQL操作で 同じクエリまたは突然変異フィールドを複数回 を使用することもできます。これは、フィールドパラメータを使用する場合に特に興味深いものです。
query {
first: POJO(first: 1) {
id
name
}
second: POJO(first: 1, skip: 1) {
id
name
}
}
問題は、そもそもスキーマをどのように作成していますか? JavaとGraphQLタイプの間には本質的な接続はありません-それらを相関させない限り、それらは完全に無関係です。したがって、スキーマで任意の方法でフィールドに名前を付け、リゾルバを作成できます(DataFetcher
)どこからでも値を取得します(したがって、任意のPOJOフィールドも)。
ツールを使用してJava types( graphql-Java-annotations 、 graphql-spqr etc)からスキーマを生成する場合、前述のツールの両方を使用すると、注釈を使用してマッピングをカスタマイズできますGraphQL-SPQRは、外部設定でも同様にマッピングをカスタマイズできます。
質問をさらに明確にすると、より正確な回答を提供できます。
GraphQLNameアノテーションが役立つようです。
documentation の例:「さらに、@ GraphQLNameを使用してフィールド名をオーバーライドできます。@ GraphQLDescriptionを使用して説明を設定できます。」
これらは、フィールドパラメータにも使用できます。
public String field(@GraphQLName("val") String value) {
return value;
}