GraphQL API использует Spring Boot Resttemplate, что всегда приводит к {ошибкам: [{сообщение: Строка запроса отсутствует}]}

В настоящее время мы хотим использовать конечную точку 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 у нас нет проблем с использованием конечной точки, и мы получаем ответ просто отлично вывод почтальона

Может кто-нибудь, пожалуйста, помогите нам направить нас к правильному ресурсу


person krishna110293    schedule 06.02.2020    source источник
comment
Лучше использовать GraphQLTestTemplate из graphql-spring-boot-starter-test. Затем вы можете отправить запрос, используя graphQLTestTemplate.postForResource("graphql/transaction.graphql")   -  person seenimurugan    schedule 13.05.2021


Ответы (1)


вы устанавливаете заголовок типа контента в «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);
}
person Ulky Igor    schedule 14.02.2020