Vai al contenuto

Trasformatore di classi GraphQL in Java — Numio

Genera classi Java per le enumerazioni e i tipi di input in uno schema GraphQL utilizzando @graphql-codegen/java. Tutto è annidato all'interno di una classe pubblica Types; i tipi di oggetto, le interfacce e le query non vengono convertiti.

Creazione di classi di input Java per argomenti di mutazione in un server graphql-java.

GraphQL Schema

Java (Enum and Input)

Quando usarlo

  • Creazione di classi di input Java per argomenti di mutazione in un server graphql-java.
  • Ottenere enumerazioni Java che rispecchiano esattamente i valori enum GraphQL.

Come si usa

  1. Incolla uno schema con l'enumerazione e le definizioni di input nell'editor dello schema GraphQL.
  2. Esamina la classe Types generata: un'enumerazione pubblica per enum GraphQL e una classe statica pubblica per tipo di input.
  3. Copialo in un file Types.java e modifica il pacchetto com.example.graphql nel tuo pacchetto.

Schema GraphQL

enum Role {
  ADMIN
  EDITOR
}

input CreateUserInput {
  name: String!
  email: String
  role: Role = EDITOR
  tags: [String!]
}

type Query {
  ping: String
}

Enumerazioni Java e classi di 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");
…

Dettagli e limiti

Per impostazione predefinita la riga del pacchetto è com.example.graphql, perché la pagina non ha impostazioni del pacchetto. Cambialo nel pacchetto del tuo progetto.

Ogni classe di input ha un costruttore che legge un Map<String, Object> di argomenti, oltre a getter e setter. I valori predefiniti dello schema (ruolo: Role = EDITOR) non vengono applicati.

Mappatura dei tipi: da stringa a stringa, da int a intero, da float a double, da booleano a booleano, da ID a oggetto, dagli elenchi a Iterable<T>. I nomi degli input che non terminano con Input ricevono il suffisso (A diventa AInput).

FAQ

Perché i miei tipi di oggetto mancano dall'output Java?

Il plugin Java genera solo enumerazioni e tipi di input. Per le interfacce di recupero dati per tipo di oggetto, utilizzare l'opzione Firma dei risolutori JAVA nella pagina Firma dei risolutori da GraphQL.

Come vengono gestiti i tipi di input annidati?

Un campo il cui tipo è un altro input diventa quella classe e il costruttore lo costruisce dalla mappa nidificata, ad esempio new BInput((Map<String, Object>) args.get("nested")).

Funziona su un server?

No. Il generatore di codice viene eseguito in un Web Worker nel tuo browser.

Specifiche e riferimenti