Ich habe kein Beispiel gefunden, wie ich mein Problem lösen kann, deshalb möchte ich Sie um Hilfe bitten. Ich kann keine POST-Anfrage einfach mit dem RestTemplate-Objekt in JSON senden
Jedes Mal, wenn ich bekomme:
org.springframework.web.client.HttpClientErrorException: 415 Nicht unterstützter Medientyp
Ich benutze RestTemplate folgendermaßen:
...
restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = new ArrayList<HttpMessageConverter<?>>();
list.add(new MappingJacksonHttpMessageConverter());
restTemplate.setMessageConverters(list);
...
Payment payment= new Payment("Aa4bhs");
Payment res = restTemplate.postForObject("http://localhost:8080/aurest/rest/payment", payment, Payment.class);
Was ist meine Schuld?
Antworten:
Diese Technik hat bei mir funktioniert:
ich hoffe das hilft
quelle
.put()
istvoid
!postForEntity(url, entity, String.class)
Werken anstelle vonput(url, entity)
Beim Versuch, einen REST-Endpunkt zu debuggen, ist dieses Problem aufgetreten. Hier ist ein einfaches Beispiel für die Verwendung der RestTemplate-Klasse von Spring, um eine von mir verwendete POST-Anforderung zu erstellen. Ich habe ziemlich lange gebraucht, um Code von verschiedenen Stellen zusammenzusetzen und eine funktionierende Version zu erhalten.
Der bestimmte JSON-Parser, den mein Restendpunkt verwendet hat, benötigt doppelte Anführungszeichen um Feldnamen. Deshalb habe ich die doppelten Anführungszeichen in meiner requestJson-Zeichenfolge umgangen.
quelle
Ich habe die Restvorlage mit JSONObjects wie folgt verwendet:
quelle
Wie hier angegeben , müssen Sie ein
messageConverter
für hinzufügenMappingJacksonHttpMessageConverter
quelle
Wenn Sie Spring 3.0 verwenden, können Sie die Ausnahme org.springframework.web.client.HttpClientErrorException: 415 Ausnahme für nicht unterstützte Medientypen auf einfache Weise vermeiden, indem Sie die Jackson-JAR-Dateien in Ihren Klassenpfad aufnehmen und das
mvc:annotation-driven
Konfigurationselement verwenden. Wie hier angegeben .Ich habe mir die Haare ausgezogen, um herauszufinden, warum die mvc-ajax- App ohne spezielle Konfiguration für das funktioniert
MappingJacksonHttpMessageConverter
. Wenn Sie den Artikel lesen, den ich oben eng verlinkt habe:quelle
Der Fehler "415 Nicht unterstützter Medientyp" weist darauf hin, dass der Server Ihre POST-Anforderung nicht akzeptiert. Ihre Anfrage ist absolut in Ordnung, es ist der Server, der falsch konfiguriert ist.
MappingJacksonHttpMessageConverter
setzt den Header fürapplication/json
den Anfrageinhaltstyp automatisch auf , und ich vermute, dass Ihr Server dies ablehnt. Sie haben uns jedoch nichts über Ihr Server-Setup erzählt, daher kann ich Sie dazu nicht wirklich beraten.quelle
Ich mache das so und es funktioniert.
// Überschriften hier übergeben
Hoffe das hilft
quelle
Ich habe dieses Problem bekommen und verwende Spring's RestTemplate auf dem Client und Spring Web auf dem Server. Beide APIs weisen eine sehr schlechte Fehlerberichterstattung auf, was ihre Entwicklung äußerst schwierig macht.
Nachdem ich viele Stunden lang alle möglichen Experimente ausprobiert hatte, stellte ich fest, dass das Problem durch die Übergabe einer Nullreferenz für den POST-Body anstelle der erwarteten Liste verursacht wurde. Ich gehe davon aus, dass RestTemplate den Inhaltstyp nicht aus einem Nullobjekt ermitteln kann, sich aber nicht darüber beschwert. Nachdem ich die richtigen Header hinzugefügt hatte, bekam ich im Frühjahr eine andere serverseitige Ausnahme, bevor ich meine Dienstmethode eingab.
Das Update bestand darin, eine leere Liste vom Client anstelle von null zu übergeben. Es sind keine Header erforderlich, da der Standardinhaltstyp für Nicht-Null-Objekte verwendet wird.
quelle
Dieser Code funktioniert für mich;
quelle
Wenn Sie die Antwort nicht verarbeiten möchten
Wenn Sie eine Antwort auf den Prozess benötigen
quelle
Bei mir ist bei diesem Setup ein Fehler aufgetreten:
AndroidAnnotations
Spring Android RestTemplate Module
und ...GsonHttpMessageConverter
Android-Annotationen haben einige Probleme damit, eine
POST
Anforderung ohne Parameter zu generieren . Einfach Parameternew Object()
löste es für mich.quelle
Warum härter arbeiten als nötig?
postForEntity
akzeptiert ein einfachesMap
Objekt als Eingabe. Das Folgende funktioniert gut für mich, wenn ich im Frühjahr Tests für einen bestimmten REST-Endpunkt schreibe. Ich glaube, es ist die einfachste Möglichkeit, im Frühjahr eine JSON-POST-Anfrage zu stellen:quelle
Wenn Sie den JSON nicht selbst zuordnen möchten, können Sie dies wie folgt tun:
quelle
Ich habe im Frühjahr Folgendes versucht:
quelle