Converter GraphQL em classes Java — Numio
Gera classes Java para os enums e tipos input de um schema GraphQL usando @graphql-codegen/java. Tudo fica aninhado dentro de public class Types; tipos de objeto, interfaces e queries não são convertidos.
Criar classes input Java para os argumentos de mutations em um servidor graphql-java.
Quando usar
- Criar classes input Java para os argumentos de mutations em um servidor graphql-java.
- Obter enums Java que espelham exatamente os valores dos enums GraphQL.
Como usar
- Cole no editor GraphQL Schema um schema com definições enum e input.
- Revise a classe Types gerada: um public enum por enum GraphQL e uma public static class por tipo input.
- Copie-a para um arquivo Types.java e troque package com.example.graphql pelo seu próprio pacote.
Schema GraphQL
enum Role {
ADMIN
EDITOR
}
input CreateUserInput {
name: String!
email: String
role: Role = EDITOR
tags: [String!]
}
type Query {
ping: String
}Enums e 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");
…Detalhes e limitações
A linha package usa com.example.graphql por padrão, porque a página não tem configuração de pacote. Troque pelo pacote do seu projeto.
Cada classe input tem um construtor que lê um Map<String, Object> de argumentos, além de getters e setters. Valores padrão do schema (role: Role = EDITOR) não são aplicados.
Mapeamento de tipos: String para String, Int para Integer, Float para Double, Boolean para Boolean, ID para Object e listas para Iterable<T>. Nomes de input que não terminam em Input recebem o sufixo (A vira AInput).
FAQ
Por que meus tipos de objeto não aparecem na saída Java?
O plugin java gera apenas enums e tipos input. Para interfaces de data fetcher por tipo de objeto, use a opção JAVA Resolvers Signature na página GraphQL to Resolvers Signature.
Como os tipos input aninhados são tratados?
Um campo cujo tipo é outro input vira essa classe, e o construtor a monta a partir do map aninhado, por exemplo new BInput((Map<String, Object>) args.get("nested")).
Isso roda em um servidor?
Não. O gerador de código roda em um Web Worker no seu navegador.