GraphQL api использует при весенней загрузке Resttemplate, что приводит к {"errors": [{"message": "Строка запроса отсутствует"}]} всегда - PullRequest
1 голос
/ 07 февраля 2020

В настоящее время мы хотим использовать конечную точку graphQL в приложении Springboot с помощью resttemplate

Однако, когда мы делаем запрос POST с помощью запроса ниже, мы всегда получаем одну и ту же ошибку {"errors": [{" message ":" Строка запроса отсутствует "}]}

Ниже приведен фрагмент, который мы хотим запустить,

    @Test
    public void testSwoop(){

        RestTemplate restTemplate = restTemplate();

        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer *************");
        headers.add("content-type", "application/graphql");

        String query1 = "{\n" +
                "  \"query\": query {\n" +
                "    \"locationTypes\": {\n" +
                "      \"edges\": \n" +
                "        {\n" +
                "          \"node\": \n" +
                "        {\n" +
                "          \"name\"\n" +
                "        }\n" +
                "        }\n" +
                "    }\n" +
                "  }\n" +
                "}";

        String URL = "https://staging.joinswoop.com/graphql";

        ResponseEntity<String> response = restTemplate.postForEntity(URL, new HttpEntity<>(query1, headers), String.class);
      System.out.println("The response================="+response);
    }

Однако, из Почтальона, у нас нет никаких проблем с использованием конечная точка, и мы получаем ответ просто отлично postman output

Может кто-нибудь помочь нам направить нас к нужному ресурсу

1 Ответ

0 голосов
/ 15 февраля 2020

вы устанавливаете заголовок типа контента на "application / graphql", но вы отправляете JSON в качестве данных. Два решения, которые могут работать:

Отправка JSON:

Установите тип содержимого "application / json" и отправьте запрос в формате JSON:

@Test
public void testSwoop(){

    RestTemplate restTemplate = restTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Bearer *************");
    headers.add("content-type", "application/json"); // just modified graphql into json

    String query1 = "{\n" +
            "  \"query\": query {\n" +
            "    \"locationTypes\": {\n" +
            "      \"edges\": \n" +
            "        {\n" +
            "          \"node\": \n" +
            "        {\n" +
            "          \"name\"\n" +
            "        }\n" +
            "        }\n" +
            "    }\n" +
            "  }\n" +
            "}";

    String URL = "https://staging.joinswoop.com/graphql";

    ResponseEntity<String> response = restTemplate.postForEntity(URL, new HttpEntity<>(query1, headers), String.class);
  System.out.println("The response================="+response);
}

Отправка запроса GraphQL:

Если ваш сервер поддерживает это (должно), задайте тип контента «application / graphql» и отправьте реальный запрос graphql в виде строки.

@Test
public void testSwoop(){

    RestTemplate restTemplate = restTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Bearer *************");
    headers.add("content-type", "application/graphql"); // maintain graphql

    // query is a grapql query wrapped into a String
    String query1 = "{\n" +
            "    locationTypes: {\n" +
            "      edges: \n" +
            "        {\n" +
            "          node: \n" +
            "        {\n" +
            "          name\n" +
            "        }\n" +
            "        }\n" +
            "    }\n" +
            "  }";

    String URL = "https://staging.joinswoop.com/graphql";

    ResponseEntity<String> response = restTemplate.postForEntity(URL, new HttpEntity<>(query1, headers), String.class);
  System.out.println("The response================="+response);
}
...