【问题标题】:How to excute graphql query with okHttpClient?如何使用 okHttpClient 执行 graphql 查询?
【发布时间】:2021-05-06 16:17:56
【问题描述】:

我有这个查询正在处理邮递员

    query  {
getInstallment(amount: "400", bin: "400000", userName: "guille") {
    cardBrand
}
}

但是当我尝试使用 okHttpClient 执行此有效负载时

    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/graphql");
    RequestBody body = RequestBody.create(mediaType, "query  {\n" +
            "getInstallment(amount: \"400\", bin: \"400000\", userName: \"sbernal\") {\n" +
            "    cardBrand\n" +
            "}}");
    Request request = new Request.Builder()
            .url("https://awsendpoint.appsync-api.us-east-1.amazonaws.com/graphql")
            .post(body)
            .addHeader("x-api-key", "dket")
            .build();

    Response response = client.newCall(request).execute();
    System.out.println(response.code());

}

    OkHttpClient client = new OkHttpClient();

    MediaType mediaType = MediaType.parse("application/graphql");
    RequestBody body = RequestBody.create(mediaType, "query  {\n" +
            "getInstallment(amount: \"400\", bin: \"400000\", userName: \"guille\") {\n" +
            "    cardBrand\n" +
            "}}");
    Request request = new Request.Builder()
            .url("https://ziexbkvj5bghnnyicsbge737oa.appsync-api.us-east-1.amazonaws.com/graphql")
            .post(body)
            .addHeader("x-api-key", "da2-7utq5lkg5zcllodmlzp66dd3vy")
            .build();

    Response response = client.newCall(request).execute();
    System.out.println(response.code());



}}

我得到一个错误 400,我做错了什么?我应该使用另一个 httpclient 吗?

【问题讨论】:

  • 您收到什么错误信息?您可以在发送之前对有效负载进行 json 编码 ``` String query = "query {\n" + "getInstallment(amount: \"400\", bin: \"400000\", userName: \"guille\") {\n" + " cardBrand\n" + "}}" URLEncoder.encode(query) ```
  • @DhanialRizkyWiraPutra 我收到 400(错误请求)
  • 你能展示一个与 chrome 命令类似的工作示例吗?

标签: java graphql httpclient okhttp aws-appsync


【解决方案1】:

可能有 2 个问题(+ 1 个弃用和 1 个注释):

  1. 我在 appsync 中成功使用了“application/json”(但我没有尝试使用“application/graphql”):
    public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
  1. body的内容必须是Json序列化的String:
RequestBody body = RequestBody.create(mediaType, "{ \"query\": \"query  {\n" +
            "getInstallment(amount: \"400\", bin: \"400000\", userName: \"sbernal\") {\n" +
            "    cardBrand\n" +
            "}} }");
  1. 使用的 RequestBody.create 现在已弃用,但您可以将 Json 字符串作为第一个参数来删除弃用警告。

  2. 为了完整起见,请注意 Json 对象 [查询、操作名称和变量] 中有几个可用的键,例如:

        JsonObject json = new JsonObject();
        json.addProperty("query", "mutation CreateAccount($name: String!) {\n"
        + "  createAccount(input: {name: $name}) {\n"
        + "    id\n"
        + "  }\n"
        + "}");
        json.addProperty("operationName", "CreateAccount");
        JsonObject variables = new JsonObject();
        variables.addProperty("name", "account1");
        json.add("variables", variables);
        
        RequestBody body = RequestBody.create(json.toString(), JSON);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2020-02-05
    • 2022-12-06
    • 2017-05-16
    • 2017-09-11
    • 1970-01-01
    • 2019-09-20
    • 2016-11-30
    相关资源
    最近更新 更多