GraphQL을 Java 클래스로 변환 — Numio
@graphql-codegen/java를 사용해 GraphQL 스키마의 enum과 input 타입에서 Java 클래스를 생성합니다. 모두 public class Types 안에 중첩되며, 객체 타입, interface, 쿼리는 변환되지 않습니다.
graphql-java 서버에서 mutation 인자용 Java input 클래스를 만듭니다.
이럴 때 사용하세요
- graphql-java 서버에서 mutation 인자용 Java input 클래스를 만듭니다.
- GraphQL enum 값과 정확히 일치하는 Java enum을 얻습니다.
사용 방법
- enum과 input 정의가 있는 스키마를 GraphQL Schema 편집기에 붙여 넣습니다.
- 생성된 Types 클래스를 확인합니다. GraphQL enum마다 public enum 하나, input 타입마다 public static class 하나가 생성됩니다.
- 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>를 읽는 생성자와 getter, setter가 있습니다. 스키마의 기본값(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 인터페이스가 필요하면 GraphQL to Resolvers Signature 페이지의 JAVA Resolvers Signature 옵션을 사용하세요.
중첩된 input 타입은 어떻게 처리되나요?
다른 input 타입을 가진 필드는 해당 클래스가 되고, 생성자가 중첩된 map에서 이를 만듭니다. 예: new BInput((Map<String, Object>) args.get("nested")).
서버에서 실행되나요?
아니요. 코드 생성기는 브라우저 Web Worker에서 실행됩니다.