Ich möchte das folgende (funktionierende) Curl-Snippet in einen RestTemplate-Aufruf konvertieren:
curl -i -X POST -d "[email protected]" https://app.example.com/hr/email
Wie übergebe ich den E-Mail-Parameter korrekt? Der folgende Code führt zu einer Antwort 404 Not Found:
String url = "https://app.example.com/hr/email";
Map<String, String> params = new HashMap<String, String>();
params.put("email", "[email protected]");
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity( url, params, String.class );
Ich habe versucht, den richtigen Aufruf in PostMan zu formulieren, und ich kann ihn korrekt zum Laufen bringen, indem ich den E-Mail-Parameter als "Formulardaten" -Parameter im Textkörper spezifiziere. Was ist der richtige Weg, um diese Funktionalität in einem RestTemplate zu erreichen?
java
spring
rest
resttemplate
sim
quelle
quelle
Antworten:
Die POST-Methode sollte entlang des HTTP-Anforderungsobjekts gesendet werden. Die Anforderung kann entweder einen HTTP-Header oder einen HTTP-Body oder beides enthalten.
Erstellen wir daher eine HTTP-Entität und senden die Header und Parameter in body.
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#postForObject-java.lang.String-java.lang.Object-java.lang. Class-java.lang.Object ...-
quelle
ResponseEntity<String> response = new RestTemplate().postForEntity(url, request, String.class);
Ichorg.springframework.http.converter.HttpMessageNotWritableException: Could not write content: No serializer found for class java.util.Collections$3
args
ist ein Array von Stringcurl -X POST --data '{"file": "/xyz.jar", "className": "my.class.name", "args": ["100"]}' -H "Content-Type: application/json" localhost:1234/batches
So veröffentlichen Sie gemischte Daten: Datei, Zeichenfolge [], Zeichenfolge in einer Anforderung.
Sie können nur das verwenden, was Sie benötigen.
Die POST-Anforderung enthält Datei in ihrem Hauptteil und in der nächsten Struktur:
quelle
Hier ist das vollständige Programm zum Ausführen eines POST-Restaufrufs mit Spring's RestTemplate.
quelle
ResponseEntity<?> response = new RestTemplate().postForEntity(url, request, String.class);
. Ichorg.springframework.http.converter.HttpMessageNotWritableException: Could not write content: No serializer found for class java.util.Collections$3
application/json
Inhaltstyp durch den ersetzen,application/x-www-form-urlencoded
erhalten Sie org.springframework.web.client.RestClientException: Kein HttpMessageConverter für java.util.HashMap und Inhaltstyp "application / x-www-form-urlencoded" - siehe stackoverflow.com/q / 31342841/355438Ihre URL-Zeichenfolge benötigt variable Markierungen für die Karte, die Sie an die Arbeit übergeben, z.
Oder Sie können die Abfrageparameter zunächst explizit in den String codieren und müssen die Map überhaupt nicht übergeben, z. B.:
Siehe auch https://stackoverflow.com/a/47045624/1357094
quelle