Apache Camelを使用してGETリクエストをRESTサービスに送信できましたが、Apacheを使用してJSONボディでPOSTリクエストを送信しようとしていますCamel。JSON本文を追加してリクエストを送信する方法がわかりませんでした。JSON本文を追加してリクエストを送信し、応答コードを取得するにはどうすればよいですか?
以下は、POSTメソッドを使用してjsonを(2秒ごとに)送信するサンプルルートです。この例では、localhost:8080/greetingです。また、提示された応答を取得します。
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)));
通常、jsonを手動で準備することはお勧めできません。あなたは例えばを使用することができます.
<dependency>
<groupId>org.Apache.camel</groupId>
<artifactId>camel-gson</artifactId>
</dependency>
マーシャリングを実行します。 Greetingクラスが定義されていると仮定すると、最初のプロセッサを削除し、代わりに次のコードを使用してルートを変更できます。
.process(exchange -> exchange.getIn().setBody(new Greeting("The title2", "The content2")))
.marshal().json(JsonLibrary.Gson)
さらに読む: http://camel.Apache.org/http.html http4コンポーネントもあることは注目に値します(内部で異なるバージョンのApache HttpClientを使用しています)。
これがあなたがそれをすることができる方法です:
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.to("http://www.google.com");
現在のCamelExchangeの本体はURLエンドポイントにPOSTされます。
//This code is for sending post request and getting response
public static void main(String[] args) throws Exception {
CamelContext c=new DefaultCamelContext();
c.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("i am worlds fastest flagship processor ");
exchange.getIn().setHeader("CamelHttpMethod", "POST");
exchange.getIn().setHeader("Content-Type", "application/json");
exchange.getIn().setHeader("accept", "application/json");
}
})
// to the http uri
.to("https://www.google.com")
// to the consumer
.to("seda:end");
}
});
c.start();
ProducerTemplate pt = c.createProducerTemplate();
// for sending request
pt.sendBody("direct:start","{\"userID\": \"678\",\"password\": \"password\",
\"ID\": \"123\" }");
ConsumerTemplate ct = c.createConsumerTemplate();
String m = ct.receiveBody("seda:end",String.class);
System.out.println(m);
}