Aller au contenu

Convertir GraphQL en classes Java — Numio

Génère des classes Java pour les enums et les types input d'un schéma GraphQL avec @graphql-codegen/java. Tout est imbriqué dans public class Types ; les types objet, les interfaces et les queries ne sont pas convertis.

Créer des classes input Java pour les arguments de mutations dans un serveur graphql-java.

GraphQL Schema

Java (Enum and Input)

Quand l’utiliser

  • Créer des classes input Java pour les arguments de mutations dans un serveur graphql-java.
  • Obtenir des enums Java qui reflètent exactement les valeurs des enums GraphQL.

Mode d’emploi

  1. Collez dans l'éditeur GraphQL Schema un schéma contenant des définitions enum et input.
  2. Examinez la classe Types générée : un public enum par enum GraphQL et une public static class par type input.
  3. Copiez-la dans un fichier Types.java et remplacez package com.example.graphql par votre propre package.

Schéma GraphQL

enum Role {
  ADMIN
  EDITOR
}

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

type Query {
  ping: String
}

Enums et classes input 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");
…

Détails et limites

La ligne package vaut com.example.graphql par défaut, car la page n'a pas de réglage de package. Remplacez-la par le package de votre projet.

Chaque classe input a un constructeur qui lit une Map<String, Object> d'arguments, ainsi que des getters et setters. Les valeurs par défaut du schéma (role: Role = EDITOR) ne sont pas appliquées.

Correspondance des types : String vers String, Int vers Integer, Float vers Double, Boolean vers Boolean, ID vers Object, listes vers Iterable<T>. Les noms d'input qui ne se terminent pas par Input reçoivent le suffixe (A devient AInput).

FAQ

Pourquoi mes types objet sont-ils absents de la sortie Java ?

Le plugin java ne génère que des enums et des types input. Pour des interfaces de data fetcher par type objet, utilisez l'option JAVA Resolvers Signature de la page GraphQL to Resolvers Signature.

Comment les types input imbriqués sont-ils gérés ?

Un champ dont le type est un autre input devient cette classe, et le constructeur la construit à partir de la map imbriquée, par exemple new BInput((Map<String, Object>) args.get("nested")).

Cela s'exécute-t-il sur un serveur ?

Non. Le générateur de code s'exécute dans un Web Worker de votre navigateur.

Spécifications et références