POST Anfrage zur REST-API mit JSON-Objekt als payload
Ich versuche, um die JSON-Antwort der REST-API mithilfe der POST-Anforderung, die JSON-payload (sollte umgewandelt werden in URL-codierten text vor dem senden). Ich habe einige Anleitungen, den Prozess zu implementieren, aber ich bekomme Fehler mit status-code 400. Ich kann nicht Codierung der angegebenen JSON-string oder etwas fehlt. Bitte helfen Sie mir dieses problem zu lösen. Danke.
Hier ist mein code
try {
URL url = new URL("https://appem.totango.com/api/v1/search/accounts/health_dist");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("app-token", "1a1c626e8cdca0a80ae61b73ee0a1909941ab3d7mobile+testme@totango.com");
conn.setRequestProperty("Accept", "application/json, text/javascript, */*; q=0.01");
conn.setRequestProperty("X-Requested-With","XMLHttpRequest");
String payload = "{\"terms\":[{\"type\":\"totango_user_scope\",\"is_one_of\":[\"[email protected]\"]}],\"group_fields\":[{\"type\":\"health\"}]}";
OutputStream os = conn.getOutputStream();
os.write(payload.getBytes());
os.flush();
if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
- Sind Sie immer eine Antwort Körper sowie die 400-Statuscode?
- Nein, nur den status-code.
- Sie fordern keine conn.connect() nach deinem os.flush(), ich denke, dass könnte das Problem sein
- Hinzugefügt conn.connect() ist aber immer noch die gleiche exception.
- Ich habe gerade versucht deinen code, wenn ich entfernen, conn.RequestProperty("app-token", bekomme ich die Fehlermeldung 401 Unauthorized, aber wenn ich habe es zurück, ich bekomme die 400-Fehler bad request. so, es hat etwas zu tun mit app-token
- Ja. Aber bekomme ich Antwort, wenn ich Briefträger - Erweiterung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachdem viele posts und tutorials für mehr als 24 Stunden habe ich erfahren, dass ich bin nicht das senden meiner URL-Parameter richtig ein. Und auch ich habe gelernt, dass REST-API-Aufruf mit ApacheHttpClient ist vergleichsweise einfacher. Ich beschloss, dass ich meine HTTP-Fehler-code 400, und bekam die Antwort zurück vom server. Hier ist der funktionierende code für mein Problem.
Die API, die Sie aufrufen muss einen query-parameter namens "query=" true|false".
Nachdem Sie diese Parameter, die HTTP-Anfrage selbst gelingt, mit status-code-200, aber der REST-Aufruf schlägt mit einigen server-Seite-Fehler. Vielleicht brauchen Sie eine andere Nutzlast.
Ich schlage vor, wenn Sie neu sind, um sich AUSZURUHEN, versuchen Sie, einen REST-client wie Briefträger
"status": "Server error", "detailed_error": "com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.saaspulse.web.api.search.EntityGroupForm] from Boolean value; no single-boolean/Boolean-arg constructor/factory method"
conn.getResponseCode() != HttpURLConnection.HTTP_OK
. Auch, wenn Sie denken, dass Ihre ursprüngliche Frage beantwortet wird, fühlen Sie sich frei, um die Antwort akzeptieren.