Перейти к содержимому

Преобразователь GraphQL в классы Java — Numio

Генерирует Java-классы для enum и input-типов GraphQL-схемы с помощью @graphql-codegen/java. Всё вложено в public class Types; объектные типы, interface и запросы не преобразуются.

GraphQL Schema

Java (Enum and Input)

Когда пригодится

  • Создать Java input-классы для аргументов mutations на сервере graphql-java.
  • Получить Java enum, точно повторяющие значения GraphQL enum.

Как пользоваться

  1. Вставьте схему с определениями enum и input в редактор GraphQL Schema.
  2. Проверьте сгенерированный класс Types: по одному public enum на каждый GraphQL enum и по одному public static class на каждый input-тип.
  3. Скопируйте его в файл Types.java и замените package com.example.graphql на свой пакет.

GraphQL-схема

enum Role {
  ADMIN
  EDITOR
}

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

type Query {
  ping: String
}

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

Подробности и ограничения

Строка package по умолчанию — com.example.graphql, так как на странице нет настройки пакета. Замените её на пакет вашего проекта.

У каждого input-класса есть конструктор, читающий Map<String, Object> аргументов, а также геттеры и сеттеры. Значения по умолчанию из схемы (role: Role = EDITOR) не применяются.

Сопоставление типов: String в String, Int в Integer, Float в Double, Boolean в Boolean, ID в Object, списки в Iterable<T>. Имена input, не оканчивающиеся на Input, получают этот суффикс (A становится AInput).

FAQ

Почему в Java-выводе нет моих объектных типов?

Плагин java генерирует только enum и input-типы. Для интерфейсов data fetcher по каждому объектному типу используйте вариант JAVA Resolvers Signature на странице GraphQL to Resolvers Signature.

Как обрабатываются вложенные input-типы?

Поле, тип которого — другой input, становится этим классом, а конструктор создаёт его из вложенной карты, например new BInput((Map<String, Object>) args.get("nested")).

Выполняется ли это на сервере?

Нет. Генератор кода работает в Web Worker в браузере.

Спецификации и справка