【问题标题】:How to execute a mutation for Graphql in a Java Client Code?如何在 Java 客户端代码中为 Graphql 执行突变?
【发布时间】:2021-09-28 18:45:12
【问题描述】:

这是我的架构

type Mutation{
createUser(username: String!, email: String!, tempPassword: String!): ComplexCallResult
        @aws_iam
}

我正在使用 AmazoneWebServicesClient 执行查询。对于已在架构中定义的查询,我在 post 请求正文中输入如下

  private String queryAllUsers = "{\n" +
            "    \"query\": \"{listUsers {name}}\",\n" +
            "    \"variables\": null,\n" +
            "    \"operationsName\": null\n" +
            "}";

现在我想运行类似于上面的突变。我的输入查询是

{ “突变”:“{createUser(电子邮件:“test@lb.de”,tempPassword:“LPwd!”,用户名:“testUser1”){异常成功}}” }

在 Java 代码中:

  private String testCreateUserInputQuery= "{\n" +
            "    \"mutation\":\"{createUser(email: \\\"test@lb.de\\\", tempPassword: \\\"LPwd!\\\", username: \\\"testUser10\\\") {  Exception  Success}}\"\n" +
            "}";

但这不起作用。请提供任何线索

编辑:我正在更新我在这里所做的:

这是我最近的一次尝试,但没有成功。

private String testCreateUserInputQuery= "{\n" +
            "    \"query\":\"{mutation($username:String!,$email:String!,$tempPassword:String!) {createUser(username:$username,email:$email,tempPassword:$tempPassword) { Exception  Success }}}\", \"variables\":{\"input\":{\"username\":\"testUser11\",\"email\":\"test@lb.de\",\"tempPassword\":\"L123!\"  }  }\n" +
            "    }";

也试过这样:

  private String testCreateUserInputQuery= "{\n" +
            "    \"query\":\"{mutation createUser($username:String!,$email:String!,$tempPassword:String!) {createUser(username:$username,email:$email,tempPassword:$tempPassword) { Exception  Success }}}\", \"variables\":{\"input\":{\"username\":\"testUser11\",\"email\":\"test@lb.de\",\"tempPassword\":\"L123!\"  }  }\n" +
            "    }";

我收到如下异常

{"errors":[{"message":"Unable to parse GraphQL query.","errorType":"MalformedHttpRequestException"}]} (Service: appsync; Status Code: 400; Error Code: MalformedHttpRequestException; Request ID: af42c6eb-dd5f-401e-9cac-530e9c62df71; Proxy: null)

无法找到错误所在,也没有任何线索。我已经筋疲力尽了。

无法使用 Postman 或 Insomnia 来试用此 API,因为这是我的组织的工作,并且该 API 受 AWS IAM 保护。我还没有获得在 Postman 或 Insomnia 中测试这一点的凭据。我只能通过代码来测试它。

【问题讨论】:

标签: java graphql graphql-mutation


【解决方案1】:

为了做这个手术,我不得不进行不必要的挣扎。 Insomnia 工具会自动将 GraphQL 查询转换为 JSON 查询。复制并粘贴或编写您的 GraphQL 查询,保持输入模式格式为 GraphQL。完成后,选择 JSON。您的 GraphQL 查询将自动转换为 JSON 查询格式。

【讨论】:

    【解决方案2】:
    private String testCreateUserInputQuery=" {\n" +
                "    \"query\":\"mutation { createUser(username: \\\"testUser12\\\",email:\\\"test@lb.de\\\",tempPassword:\\\"tempPassword123!\\\") { Exception  Success }}\"\n" +
                "    }";
    

    对于使用变量的查询,以下一个对我有用

    private String testCreateUserInputQuery= "{\n" + " \"query\":\"mutation User($uname: String!,$mail:String!,$tempPwd:String!) { createUser(username: $uname,email:$mail,tempPassword:$tempPwd) { Exception Success }}\", \"variables\":{\"uname\":\"testUser20SK\",\"mail\":\"test@lb.de\",\"tempPwd\":\"LPassword123!\"} \n" + " }";
    

    【讨论】:

    • 跟随第一个多行示例
    • 私有字符串 testCreateUserInputQuery= "{\n" + " \"query\":\"mutation($uname:String!,$mail:String!,$tempPwd:String!) {createUser( username:$uname,email:$mail,tempPassword:$tempPwd) { 异常成功}}\", \"variables\":{\"input\":{\"$uname\":\"testUser15\", \"mail\":\"test@lB.de\",\"tempPwd\":\"LpASSWORD123!\" } }\n" + " }";获取变量 uname 之类的错误已强制 String! 的 null 值。我已经传递了该变量的值。
    • no input 'level' 在变量中需要,因为没有'input' 变量
    • 你是把上述突变作为字符串还是对象传递。
    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 2019-02-21
    • 2019-02-02
    • 2018-05-21
    • 2017-06-07
    • 2017-05-15
    • 2021-07-11
    • 2021-10-06
    相关资源
    最近更新 更多