Мне нужно использовать API-интерфейс graphQL, предоставленный третьей стороной, внутри моего контроллера загрузки Spring, я пробовал, как упоминалось, здесь, но получил ошибку 400. Ниже приведен код:
@SuppressWarnings("unchecked")
@RequestMapping(value = "/graphQLTest")
public ResponseEntity<?> testGraphQL() throws JsonProcessingException {
CloseableHttpClient client= null;
CloseableHttpResponse response= null;
client= HttpClients.createDefault();
HttpPost httpPost= new HttpPost("http://172.30.66.149:3000/graphql");
httpPost.addHeader("Accept","application/json");
try {
StringEntity entity= new StringEntity("{\"query\":\"{hello}\"}");
httpPost.setEntity(entity);
response= client.execute(httpPost);
System.out.println("response: "+response);
}
catch(UnsupportedEncodingException e){
e.printStackTrace();
}
catch(ClientProtocolException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
return null;
}
Когда я попытался вызвать тот же URL-адрес в Postman, я получил ответ, приведенный ниже снимок экрана:
Но когда я пробую это в своем контроллере, я получаю ошибку ниже. Может ли кто-нибудь помочь мне, как я могу использовать чей-то GraphQL API.
Error: HttpResponseProxy{HTTP/1.1 400 Bad Request [X-Powered-By: Express, Content-Type: application/json; charset=utf-8, Content-Length: 53, ETag: W/"35-1vperDe+r7EpHry/i+J3wg", Date: Tue, 24 Apr 2018 12:32:52 GMT, Connection: keep-alive] ResponseEntityProxy{[Content-Type: application/json; charset=utf-8,Content-Length: 53,Chunked: false]}}




Я просто попытался вызвать свой API-интерфейс graphQL через jersey api, как показано ниже, и смог получить ответ.
@SuppressWarnings("unchecked")
@RequestMapping(value = "/graphQLTest")
public ResponseEntity<?> testGraphQL() throws JsonProcessingException {
JSONObject jsonObj = new JSONObject();
jsonObj.put("query", "{\n" +
" hello\n" +
"}");
Client client = Client.create();
String URL = "http://172.30.66.149:3000";
WebResource webResource = client.resource(URL);
ClientResponse response = webResource.type("application/json").accept("application/json").post(ClientResponse.class, jsonObj.toString());
String output = response.getEntity(String.class);
System.out.println(output);
return null;
}
Есть ли альтернативный способ сделать этот вызов или, в частности, способ graphQL?