REST POST funktioniert einwandfrei mit POSTBOTEN-aber Ausnahme bei der Verwendung von Spring RestTemplate
Schreibe ich eine Rest-client zu posten JSON-Daten mit Spring RestTemplate.
Mit POSTBOTEN und folgende JSON-Daten in den Körper Holen Sie sich die Antwort richtig-
{
"InCode":"test",
"Name":"This is test",
"Email":"[email protected]",
"Id":18,
}
Jedoch beim Versuch, auf die REST-API mithilfe der Frühling RestTemplate wie folgt
ResponseEntity<String> response = restTemplate.exchange(baseUrl,
HttpMethod.POST, getHeaders(), String.class);
private HttpEntity<?> getHeaders() throws JSONException {
JSONObject request = new JSONObject();
request.put("Email", "[email protected]");
request.put("Id", "18");
request.put("Name", "This is test");
request.put("InCode", "test");
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
return new HttpEntity<>(request.toString(), headers);
}
Bekomme ich die Ausnahme-
11:52:56.808 [main] DEBUG o.s.web.client.RestTemplate - Created POST request for "http://server-test/platform/v4/org"
11:52:56.815 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, */*]
12:03:47.357 [main] DEBUG o.s.web.client.RestTemplate - Writing [{"InCode":"test","Email":"[email protected]","Id":"18","Name":"This is test"}] using [org.springframework.http.converter.StringHttpMessageConverter@6a1aab78]
11:52:57.574 [main] DEBUG o.s.web.client.RestTemplate - POST request for "http://server-test/platform/v4/org" resulted in 500 (Internal Server Error); invoking error handler
Exception in thread "main" org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)
Wäre dankbar für jede Hilfe.
Sieht aus wie Ihre sind, durchführen einer Anforderung an die Basis-URL Ihrer Anwendung. Ich denke, dass ist nicht das, was Sie wollen.
Sie können durch diese gehen Link, die klar sagt, Wann welche Arten von Fehler wird zurückgegeben werden, durch RUHE. Können Sie die volle Fehler-trace-verfolgen Sie es weiter nach unten?
Die URL ist korrekt. Und dies ist die komplette StackTrace. Es macht nur nicht die Nummer der Zeile, wo es war, die während des Anrufs
Sie können durch diese gehen Link, die klar sagt, Wann welche Arten von Fehler wird zurückgegeben werden, durch RUHE. Können Sie die volle Fehler-trace-verfolgen Sie es weiter nach unten?
Die URL ist korrekt. Und dies ist die komplette StackTrace. Es macht nur nicht die Nummer der Zeile, wo es war, die während des Anrufs
InformationsquelleAutor Rehan | 2016-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Http-Fehlercode 500, die Sie immer bedeutet, dass Sie korrekt sind, schlagen Sie den REST-service. Das problem, das Sie möglicherweise sehen die ausführliche Antwort im POSTBOTE nicht sehen, das komplette stack-trace mit REST-client ist da die Antwort.getbody vielleicht eine Codierung wie Byteinputstream, die muss konvertiert werden, indem Sie Ihre REST-client-zu-String. Sie könnten mit Feder
DefaultResponseErrorHandler
Klasse.Ihre getan auf dem client-
Verlängern Sie die
DefaultResponseErrorHandler
und erstellen Sie eineTestHandler
Klasse wie folgt-Übergeben Sie die benutzerdefinierte
ErrorHandler
zuRestTemplate
alsWenn Sie eine Ausnahme von der Griff-Fehler genannt werden. Dort können Sie konvertieren die bytestream oder anderen encoding-String.
Fügte einige details in der Antwort.
InformationsquelleAutor Rameez
Sind Sie der 'Accept' - header, die definiert, welche Inhalte geben Sie akzeptieren, als eine Antwort.
Stattdessen müssen Sie die header 'Content-Type' mit 'application/json'.
Edit:
In Ihre java-code-id ist eine Zeichenfolge, in der der Postbote Ihr eine Zahl.
Kann das macht der server nicht?
Danke an Stefan. Dies löste eine icky bug, konfrontiert wurde. Ich begann, die Entsendung Anforderungen an ein system per WebResource (Jersey), als Teil des POC. Sieht alles schön, einmal implementiert habe ich den code in ein Projekt über Frühling, Rest Template, das andere system erwähnt, dass Sie erhalten eine leere JSON. Long story short und trouble-shooting-Verfahren, Anwendung Header.setContentType(MediaType.APPLICATION_JSON); ist das Problem behoben.
InformationsquelleAutor Stefan Isele - prefabware.com