GraphQL - SchemaError: - PullRequest
       60

GraphQL - SchemaError:

0 голосов
/ 06 августа 2020

Создание микросервиса в java с использованием -

spring-boot версии 2.2.6.RELEASE graphql-spring-boot-starter версии 5.0.2

Попытка сохранить запись в MongoDB используя мутацию graphql, я успешно сохранил один объект, как показано ниже -

type ParentElement {
  id: ID!
  type: String
  child: String
}

Но при попытке с вложенным объектом я вижу следующую ошибку -

Вызвано: com.coxautodev.graphql .tools.SchemaError: Ожидается, что тип 'ChildElement' будет GraphQLInputType, но это не так! Разрешен ли тип только для типов объектов, неправильно использованных в качестве типа ввода, или наоборот? 1015 *

@Document(collection="custom_element")
public class ParentElement {    
    private String id;
    private String type;
    private ChildElement child;
}

public class ChildElement {
    private String make;
    private String model;
}

@Component
public class ElementMutation implements GraphQLMutationResolver {
    private ElementRepository elementRepository;
    public ElementMutation(ElementRepository elementRepository) {
        this.elementRepository = elementRepository;
    }
    public ParentElement createElement(String id, String type, ChildElement child) {        
        ParentElement element = new ParentElement()

        elementRepository.save(element);
        return element;
    }
}

@Component
public class ElementQuery implements GraphQLQueryResolver {
    private ElementRepository elementRepository;
    @Autowired
    public ElementQuery(ElementRepository elementRepository) {
        this.elementRepository = elementRepository;
    }
    public Iterable<ParentElement> findAllElements() {
        return elementRepository.findAll();
    }
}

@Repository
public interface ElementRepository extends MongoRepository<ParentElement, String>{
}

Я хочу сохранить следующее json представление в mon go db -

{
    "id": "custom_id",
    "type": "custom_type",
    "child": {
      "make": "custom_make",
      "model": "Toyota V6",
     }
}

Я пробовал несколько вещей, но при запуске сервера всегда получалось одно и то же исключение. Приведенный выше json является простым представлением. Я хочу сохранить гораздо более сложный вариант, разница с другими примерами, доступными в Интернете, заключается в том, что я не хочу создавать отдельный объект mon go для дочернего элемента, как показано в примере Book-Author, доступном в Интернете.

1 Ответ

2 голосов
/ 07 августа 2020

Graphql type и input - две разные вещи. Вы не можете использовать type как мутацию input. Это именно то, о чем идет речь: Expected type 'ChildElement' to be a GraphQLInputType, but it wasn't, библиотека ожидала input, но нашла что-то еще (тип объекта).

Чтобы решить эту проблему, создайте дочерний вход:

input ChildInput {
  make: String
  model: String
}

type Mutation {
    createElement(id: String, type: String, child: ChildInput): ParentElement
}

Вы также можете взглянуть на этот вопрос: Можете ли вы сделать тип graphql как типом ввода, так и типом вывода?

...