Saltar al contenido

Convertir GraphQL a clases de Java — Numio

Genera clases Java para los enums y los tipos input de un esquema GraphQL con @graphql-codegen/java. Todo queda anidado dentro de public class Types; los tipos de objeto, las interfaces y las queries no se convierten.

Crear clases input de Java para los argumentos de mutations en un servidor graphql-java.

GraphQL Schema

Java (Enum and Input)

Cuándo usarla

  • Crear clases input de Java para los argumentos de mutations en un servidor graphql-java.
  • Obtener enums de Java que reflejen exactamente los valores de los enums de GraphQL.

Cómo usarla

  1. Pega en el editor GraphQL Schema un esquema con definiciones enum e input.
  2. Revisa la clase Types generada: un public enum por cada enum de GraphQL y una public static class por cada tipo input.
  3. Cópiala en un archivo Types.java y cambia package com.example.graphql por tu propio paquete.

Esquema GraphQL

enum Role {
  ADMIN
  EDITOR
}

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

type Query {
  ping: String
}

Enums y clases input de Java

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");
…

Detalles y limitaciones

La línea package es com.example.graphql por defecto, porque la página no tiene ajuste de paquete. Cámbiala por el paquete de tu proyecto.

Cada clase input tiene un constructor que lee un Map<String, Object> de argumentos, además de getters y setters. Los valores por defecto del esquema (role: Role = EDITOR) no se aplican.

Correspondencia de tipos: String a String, Int a Integer, Float a Double, Boolean a Boolean, ID a Object y listas a Iterable<T>. Los nombres de input que no terminan en Input reciben el sufijo (A pasa a AInput).

FAQ

¿Por qué faltan mis tipos de objeto en la salida Java?

El plugin java solo genera enums y tipos input. Para interfaces de data fetcher por tipo de objeto, usa la opción JAVA Resolvers Signature en la página GraphQL to Resolvers Signature.

¿Cómo se gestionan los tipos input anidados?

Un campo cuyo tipo es otro input pasa a esa clase, y el constructor la construye a partir del mapa anidado, por ejemplo new BInput((Map<String, Object>) args.get("nested")).

¿Se ejecuta en un servidor?

No. El generador de código se ejecuta en un Web Worker de tu navegador.

Especificaciones y referencias