Zum Inhalt springen

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.

GraphQL Schema

Java (Enum and Input)

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

  1. Füge ein Schema mit enum- und input-Definitionen in den Editor GraphQL Schema ein.
  2. Prüfe die erzeugte Klasse Types: ein public enum pro GraphQL-Enum und eine public static class pro Input-Typ.
  3. 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.

Spezifikationen und Referenzen