2017-03-02 4 views
1

Ich konnte eine GET-Anfrage mit Apache Camel an einen REST-Dienst senden und versuche jetzt, eine POST-Anfrage mit einem JSON-Körper mit Apache Camel zu senden. Ich konnte nicht herausfinden, wie der JSON-Body hinzugefügt und die Anfrage gesendet wird. Wie kann ich einen JSON-Body hinzufügen, die Anfrage senden und den Antwortcode erhalten? DiesePOST-Anfrage mit Apache Camel senden

Antwort

0

ist, wie Sie es tun können:

from("direct:start") 
.setHeader(Exchange.HTTP_METHOD, constant("POST")) 
.to("http://www.google.com"); 

Aktuelle Camel Exchange Körper wird an die URL Endpunkt erhalten VERÖFFENTLICHT.

1

Unten finden Sie eine Beispiel-Route, die sendet (alle 2 Sekunden) die JSON, mit POST-Methode an den Server, in dem Beispiel ist es localhost: 8080/Gruß. Es gibt auch eine Möglichkeit, die Antwort zu erhalten:

from("timer://test?period=2000") 
    .process(exchange -> exchange.getIn().setBody("{\"title\": \"The title\", \"content\": \"The content\"}")) 
    .setHeader(Exchange.HTTP_METHOD, constant("POST")) 
    .setHeader(Exchange.CONTENT_TYPE, constant("application/json")) 
    .to("http://localhost:8080/greeting") 
    .process(exchange -> log.info("The response code is: {}", exchange.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE))); 

Normalerweise ist es keine gute Idee, json manuell vorzubereiten. Sie können z.B.

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-gson</artifactId> 
</dependency> 

, um das Marshalling für Sie durchzuführen. Vorausgesetzt, dass Sie eine Gruß Klasse definiert haben Sie die Route mit dem Entfernen des ersten Prozessors ändern können und den folgenden Code verwenden, statt:

.process(exchange -> exchange.getIn().setBody(new Greeting("The title2", "The content2"))) 
.marshal().json(JsonLibrary.Gson) 

Weiterführende Literatur: http://camel.apache.org/http.html Es ist erwähnenswert, dass es auch ist http4 Komponente (sie verwenden unterschiedliche Version von Apache HttpClient unter der Haube).