Преобразователь GraphQL в классы Java — Numio
Генерирует Java-классы для enum и input-типов GraphQL-схемы с помощью @graphql-codegen/java. Всё вложено в public class Types; объектные типы, interface и запросы не преобразуются.
Создать Java input-классы для аргументов mutations на сервере graphql-java.
Когда пригодится
- Создать Java input-классы для аргументов mutations на сервере graphql-java.
- Получить Java enum, точно повторяющие значения GraphQL enum.
Как пользоваться
- Вставьте схему с определениями enum и input в редактор GraphQL Schema.
- Проверьте сгенерированный класс Types: по одному public enum на каждый GraphQL enum и по одному public static class на каждый input-тип.
- Скопируйте его в файл 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 в браузере.