GraphQLからJavaクラスへの変換器 — Numio
@graphql-codegen/java を使って、GraphQL スキーマの enum と input 型から Java クラスを生成します。すべて public class Types の中にネストされ、オブジェクト型、interface、クエリは変換されません。
graphql-java のサーバーで mutation の引数用に Java の input クラスを作る。
こんなときに使えます
- graphql-java のサーバーで mutation の引数用に Java の input クラスを作る。
- GraphQL の enum 値とまったく同じ Java の enum を得る。
使い方
- enum と input の定義を含むスキーマを GraphQL Schema エディターに貼り付けます。
- 生成された Types クラスを確認します。GraphQL の enum ごとに public enum が 1 つ、input 型ごとに public static class が 1 つ生成されます。
- Types.java ファイルにコピーし、package com.example.graphql を自分のパッケージに変更します。
GraphQL スキーマ
enum Role {
ADMIN
EDITOR
}
input CreateUserInput {
name: String!
email: String
role: Role = EDITOR
tags: [String!]
}
type Query {
ping: String
}Java の enum と input クラス
package com.example.graphql;
import java.util.HashMap;
import java.util.Map;
public class Types {
public enum Role {
ADMIN,
EDITOR
}
public static class CreateUserInput {
private String name;
private String email;
private Role role;
private Iterable<String> tags;
public CreateUserInput(Map<String, Object> args) {
if (args != null) {
this.name = (String) args.get("name");
this.email = (String) args.get("email");
if (args.get("role") instanceof Role) {
this.role = (Role) args.get("role");
…仕様と制限
ページにパッケージの設定がないため、package 行はデフォルトの com.example.graphql になります。プロジェクトのパッケージに変更してください。
各 input クラスには引数の Map<String, Object> を読み取るコンストラクターと、getter / setter があります。スキーマのデフォルト値(role: Role = EDITOR)は適用されません。
型の対応:String は String、Int は Integer、Float は Double、Boolean は Boolean、ID は Object、リストは Iterable<T>。名前が Input で終わらない input にはサフィックスが付きます(A は AInput になります)。
FAQ
Java の出力にオブジェクト型がないのはなぜですか?
java プラグインが生成するのは enum と input 型だけです。オブジェクト型ごとの data fetcher インターフェースが必要なら、GraphQL to Resolvers Signature ページの JAVA Resolvers Signature オプションを使ってください。
ネストした input 型はどう扱われますか?
別の input 型を持つフィールドはそのクラスになり、コンストラクターがネストした map から組み立てます。例:new BInput((Map<String, Object>) args.get("nested"))。
サーバーで実行されますか?
いいえ。コードジェネレーターはブラウザの Web Worker で実行されます。