Bekomme immer die Antwort null in ResponseEntity bei der Verwendung RestTemplate.postForEntity
Ich' m versuchen zu senden, JSON-Anforderung mit Jackson-Bibliothek von meiner Android-app auf den web-server, aber die Antwort ist immer null. Getestet habe ich es nur mit dem HttpRequest-API und alle funktioniert - ich habe eine Antwort. Aber jetzt versuche ich zu nutzen Spring, RestTemplate und ich kann nicht erhalten ein Ergebnis. Hier ist mein code:
protected Void doInBackground(String... params) {
LinkedHashMap<String, Object> _map = new LinkedHashMap<String, Object>();
_map.put("login", "Fred");
_map.put("password", "pass");
ObjectMapper _mapper = new ObjectMapper ();
StringWriter _writer = new StringWriter();
try {
_mapper.writeValue(_writer,_map);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String _baseURL = "https...."//Address of the server;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> _entity = new HttpEntity<String>(_writer.toString(),requestHeaders);
RestTemplate templ = new RestTemplate();
templ.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
templ.getMessageConverters().add(new StringHttpMessageConverter());
ResponseEntity<String> _response = templ.postForEntity(_baseURL, _entity,String.class);
String _Test = _response.getBody();
So, ich habe immer null in _Test.
Ich vermute, dass dies ist, weil der https-Protokoll. RestTemplate kann die Arbeit mit https?
Also, was ist falsch mit, dass-code. Wie man dieses Problem beheben?
Vielen Dank im Voraus. Ich brauche wirklich Hilfe!!!
Was die response-status-code ? (d.h. _response.getStatusCode() )
Der response-code 200. Alles OK.Hier ist ein problem. JSON-Struktur ist auch richtig. Sein kann alles, da der null-response in der postForEntity?
können Sie versuchen templ.getMessageConverters().add(new StringHttpMessageConverter()); ?
Ja, ich habe versucht, diese. Noch heute bekomme ich null Antwort. Status ist immer noch 200. Ich habe auch postForEntity(_baseURL, _entity, null) , postForEntity(_baseURL, _entity, String.class) mit StringHttpMessageConverter() und ich bekomme immer noch null-Werte. Kann der Grund, ist das https-Protokoll verwendet, die von server? RestTemplate kann die Arbeit mit https?
Der response-code 200. Alles OK.Hier ist ein problem. JSON-Struktur ist auch richtig. Sein kann alles, da der null-response in der postForEntity?
können Sie versuchen templ.getMessageConverters().add(new StringHttpMessageConverter()); ?
Ja, ich habe versucht, diese. Noch heute bekomme ich null Antwort. Status ist immer noch 200. Ich habe auch postForEntity(_baseURL, _entity, null) , postForEntity(_baseURL, _entity, String.class) mit StringHttpMessageConverter() und ich bekomme immer noch null-Werte. Kann der Grund, ist das https-Protokoll verwendet, die von server? RestTemplate kann die Arbeit mit https?
InformationsquelleAutor MainstreamDeveloper00 | 2012-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die responseType, sonst ist der RestTemplate wird wegwerfen, die Körper von Ihrer Antwort. Es braucht die responseType zu finden, die richtige message converter. Mit einem null-responseType, die Stellvertretung unter null...
Mit der RestTemplate default-Konstruktor, der Frühling umfasst nur etwa alle Wandler mit Ausnahme für RSS, XML und JSON, das hängt davon ab, ob Rom, JAXB oder Jackson ist auf dem classpath. Ich würde den responseType als String und führen Sie es mit dem debugger zu sehen, warum es nicht die Suche nach dem richtigen Konverter. Es ist für mich schwer zu sagen warum, ohne zu sehen, die Reaktion und die Kopfzeilen vom server.
Sie nicht brauchen, um hinzuzufügen, entweder von diese Konverter, Frühling gehören für Sie (vorausgesetzt, Jackson ist auf Ihrem classpath). Ich kann mir nicht mehr helfen ohne zu sehen was der server zurückgibt. Sind Sie sicher, dass der server auch die Rückkehr von allen Inhalten und nicht nur einen status-code? Welche version von Spring verwenden Sie?
Ok. Vielen Dank für diese. Ich habe _response.getHeaders().Und alle OK. Ich sehe den server-Typ, PHP-version etc.Aber _response.getBody() return [null].Vielleicht ist es, weil RestTemplate in android keine Unterstützung für https?
hyness, während dies wahr ist, mit standard-Spring-Framework, die Android-version des RestTemplate nicht automatisch alle message-Wandler. Sie können pass
true
im Konstruktor zu erreichen, das gleiche Ergebnis. Siehe Referenz-Dokumentation: static.springsource.org/spring-android/docs/1.0.x/reference/...InformationsquelleAutor hyness
Tippfehler oder sind Sie die Verbindung zu einem https-port?
Denke ich, sollten Sie überwachen Sie den port ein, den Sie eine Verbindung herstellen möchten, und sehen, ob da eine Verbindung ist auch hergestellt. Eine einfache Weise, die ich tun, um einen laptop ein ad-hoc-Netzwerk und ein Android-Gerät verbinden und dann sollten Sie in der Lage sein zu überwachen den gesamten Datenverkehr von Ihrem android-Gerät mit einem packet-sniffer wie wireshark.
Ich bin mit der org.springframework.http Klasse HttpHeaders. Nicht die standard-api. Ich schrieb in meiner Frage
InformationsquelleAutor roboto1986