Graphql отправляет POST с переменными в Postman как текст - PullRequest
0 голосов
/ 21 января 2019

У меня есть конечная точка, где мой запрос работает, когда он:

query {
    getItem(dictionaryType: "test1") {
        code
        name
        description
    }
}

Он работает нормально, см .:

enter image description here

Я хочу проверить переменную - поэтому я хочу изменить ее на что-то вроде:

query {
    getItem($dictionaryType: String) {
        code
        name
        description
    }
}
variables {
    dictionaryType: "test1"
}

Я не хочу использовать любой другой инструмент, кроме почтальона, или я бы предпочел не использовать другой формат, чем текст. При выполнении второго вывода я получаю следующую ошибку:

"errors": [
    {
        "message": "Invalid Syntax",
        "locations": [
            {
                "line": 2,
                "column": 9,
                "sourceName": null
            }
        ],

Как исправить синтаксис запроса?

enter image description here

Редактировать: У меня даже проблема с запросом с синтаксисом, как здесь: https://stackoverflow.com/a/50043390/4983983 query { getDataTypes } Чтобы перевести его в json Например: {"query": "{getDataTypes}"} Не работает и выдает ошибку синтаксического анализа JSON: Cannot deserialize instance of java.lang.String out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: (PushbackInputStream ошибка.

См .: enter image description here enter image description here

В настоящее время code для Posts конечных точек выглядит следующим образом:

@PostMapping("graphql")
public ResponseEntity<Object> getResource(@RequestBody String query) {
    ExecutionResult result = graphQL.execute(query);
    return new ResponseEntity<Object>(result, HttpStatus.OK);
}

Если я изменю его на:

@PostMapping("graphql")
public ResponseEntity<Object> getResource(@RequestBody Object query) { // String query
    ExecutionResult result;
    if (query instanceof String) {
        result = graphQL.execute(query.toString());
    } else{
        Map b = (HashMap) query;
        result = graphQL.execute(b.get("query").toString());
    }
    return new ResponseEntity<Object>(result, HttpStatus.OK);
}

Теперь, кажется, работает только json версии,Потому что, когда я использую текст, я получаю:

"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'text/plain;charset=UTF-8' not supported",
"path": "/graphql"

Есть ли другой вариант конфигурации в этом отношении?Я не знаю, будет ли variables хорошо обработан в последнем примере.

1 Ответ

0 голосов
/ 15 июля 2019

Вам необходимо обновить версию почтальона до 7.2. Почтальон теперь поддерживает запросы graphql.

https://blog.getpostman.com/2019/06/18/postman-v7-2-supports-graphql/

см. Изображение ниже.

enter image description here

...