GraphQL in Java-Klassen umwandeln — Numio
Erzeugt mit @graphql-codegen/java Java-Klassen für die Enums und Input-Typen eines GraphQL-Schemas. Alles ist in einer public class Types verschachtelt; Objekttypen, Interfaces und Queries werden nicht umgewandelt.
Java-Input-Klassen für Mutation-Argumente in einem graphql-java-Server erstellen.
Wann sie hilft
- Java-Input-Klassen für Mutation-Argumente in einem graphql-java-Server erstellen.
- Java-Enums erhalten, die die GraphQL-Enum-Werte exakt abbilden.
Anwendung
- Füge ein Schema mit enum- und input-Definitionen in den Editor GraphQL Schema ein.
- Prüfe die erzeugte Klasse Types: ein public enum pro GraphQL-Enum und eine public static class pro Input-Typ.
- Kopiere sie in eine Datei Types.java und ändere package com.example.graphql auf dein eigenes Package.
GraphQL-Schema
enum Role {
ADMIN
EDITOR
}
input CreateUserInput {
name: String!
email: String
role: Role = EDITOR
tags: [String!]
}
type Query {
ping: String
}Java-Enums und Input-Klassen
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");
…Details und Einschränkungen
Die package-Zeile ist standardmäßig com.example.graphql, da die Seite keine Package-Einstellung hat. Ändere sie auf das Package deines Projekts.
Jede Input-Klasse hat einen Konstruktor, der eine Map<String, Object> mit Argumenten liest, sowie Getter und Setter. Standardwerte aus dem Schema (role: Role = EDITOR) werden nicht angewendet.
Typzuordnung: String zu String, Int zu Integer, Float zu Double, Boolean zu Boolean, ID zu Object, Listen zu Iterable<T>. Input-Namen, die nicht auf Input enden, erhalten das Suffix (A wird zu AInput).
FAQ
Warum fehlen meine Objekttypen in der Java-Ausgabe?
Das java-Plugin erzeugt nur Enums und Input-Typen. Für Data-Fetcher-Interfaces pro Objekttyp nutze die Option JAVA Resolvers Signature auf der Seite GraphQL to Resolvers Signature.
Wie werden verschachtelte Input-Typen behandelt?
Ein Feld, dessen Typ ein anderer Input ist, wird zu dieser Klasse, und der Konstruktor baut sie aus der verschachtelten Map auf, zum Beispiel new BInput((Map<String, Object>) args.get("nested")).
Läuft das auf einem Server?
Nein. Der Codegenerator läuft in einem Web Worker im Browser.