Можем ли мы предоставить пользовательскую реализацию интерфейса ExecutionResult с помощью graphql, чтобы настроить вывод? - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно настроить вывод, предоставленный graphql (по умолчанию json), чтобы изменить его, например, на.CSV или любой другой формат.Есть ли способ предоставить пользовательскую реализацию для ExecutionResult, такую ​​как ExecutionResultImpl, и предоставить метод, аналогичный toSpecification (), чтобы изменить карту и преобразовать ее в желаемый вывод перед возвратом обратно в graphql?

Я хотел знатьесли есть способ справиться с этим?

Любая помощь будет оценена!Спасибо

Когда я пытался реализовать, он возвращает ClassCastException во время выполнения, поскольку тип перезапуска является экземпляром ExecutionResultImpl.

Вот пользовательская реализация, которую я попробовал:




import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import graphql.ExecutionResult;
import graphql.GraphQLError;

public class ExecutionResultCustomImpl implements ExecutionResult {

    private final Object data;
    private final List<GraphQLError> errors;
    private final transient boolean dataPresent;
    private final transient Map<Object, Object> extensions;

    public ExecutionResultCustomImpl(boolean dataPresent, Object data, List<? extends GraphQLError> errors, Map<Object, Object> extensions) {
        this.dataPresent = dataPresent;
        this.data = data;

        if (errors != null && !errors.isEmpty()) {
            this.errors = Collections.unmodifiableList(new ArrayList<>(errors));
        } else {
            this.errors = Collections.emptyList();
        }

        this.extensions = extensions;
    }

    public boolean isDataPresent() {
        return dataPresent;
    }

    @Override
    public <T> T getData() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public List<GraphQLError> getErrors() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public Map<Object, Object> getExtensions() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public Map<String, Object> toSpecification() {
        // TODO Auto-generated method stub
        return null;
    }

     public Map<String, Object> toCsvSpecification() {
            Map<String, Object> result = new LinkedHashMap<>();
            if (dataPresent) {
                File file = new File("data.csv");
                result.put("data", data);
                System.out.println("***********"+file.getAbsolutePath());
            }
            if (errors != null && !errors.isEmpty()) {
                //result.put("errors", errorsToSpec(errors));
                File file = new File("errors.csv");
                System.out.println("***********"+file.getAbsolutePath());
            }
            if (extensions != null) {
                result.put("extensions", extensions);
                File file = new File("extensions.csv");
                System.out.println("***********"+file.getAbsolutePath());
            }
            return result;
        }


}

...