Graphql将Postman中的变量与文本一起发送POST

时间:2019-01-21 09:54:29

标签: java graphql postman graphql-java

我有一个端点,请求在该端点上有效:

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是否会得到很好的处理。

2 个答案:

答案 0 :(得分:1)

您需要将邮递员版本更新为7.2。 邮递员现在支持graphql请求。 请参阅下面的图片。

enter image description here

答案 1 :(得分:1)

您可以尝试使用类似于以下示例的

{“查询”:“查询访问($ id:ID!){访问(interviewGuid:$ id){ 面试导师面试代码面试标题面试老板导师 50,000.00.00“”, “变量”:{“ id”:“ 725000ae-ba39-45a5-a10f-79e5b27fe747”}}

enter image description here