Добро пожаловать в Stackoverflow! Я твердо верю, что упоминание bindingMode="json"
в строке 13 является root причиной этого сбоя. В руководстве написано
При использовании привязки вы также должны указать тип POJO для сопоставления. Это является обязательным для входящих сообщений и необязательным для исходящих.
Я действительно боюсь XML DSL, но вот приблизительный эквивалент остальных DSL в Java.
@Component
@Slf4j
public class MySpringBootRouter extends RouteBuilder {
@Override
public void configure() {
restConfiguration()
.component("undertow")
.host("127.0.0.1")
.port(9090)
//This works only when a POJO mapping is possible - Ref: https://camel.apache.org/manual/latest/rest-dsl.html
//<quote>When using binding you must also configure what POJO type to map to. This is mandatory for incoming messages, and optional for outgoing.</quote>
//.bindingMode(RestBindingMode.json)
.dataFormatProperty("prettyPrint", "true");
rest("/api")
.post("/erroradmin")
.to("direct:postError")
.get("/erroradmin/{id}").to("direct:getError");
from("direct:getError")
.process(exchange -> {
exchange.getMessage().setBody(("{'messageID':'" + UUID.randomUUID().toString() + "','ticketID':'1234'}"));
});
from("direct:postError")
.unmarshal()
.json(JsonLibrary.Jackson)
.process(exchange -> {
log.info("Type of incoming body:{}", exchange.getIn().getBody().getClass().getName());
log.info("Incoming body:{}", exchange.getIn().getBody());
}).transform().constant("{'httpResponse:200':'OK'}");
}
}
Как только это произойдет, и я отправлю полезную нагрузку с помощью cURL, как показано ниже
curl -d '{"msgId":"EB2C7265-EF68-4F8F-A709-BEE2C52E842B", "ticket":"ERR001"}' -H "Content-Type: application/json" -X POST http://localh
ost:9090/api/erroradmin
В журналах вы увидите что-то подобное ниже
2020-02-18 11:44:13.032 INFO 2708 --- [ XNIO-1 task-4] o.a.c.community.so.MySpringBootRouter : Type of incoming body:java.util.LinkedHashMap
2020-02-18 11:44:13.032 INFO 2708 --- [ XNIO-1 task-4] o.a.c.community.so.MySpringBootRouter : Incoming body:{msgId=EB2C7265-EF68-4F8F-A709-BEE2C52E842B, ticket=ERR001}
О, кстати, Ваш исходный JSON груз был поврежден. Весь проект Java доступен здесь , если вы будете sh играть
Редактировать: дополнительный шаг обработки заголовка
from("direct:postError")
.unmarshal()
.json(JsonLibrary.Jackson)
.process(exchange -> {
LinkedHashMap map = exchange.getIn().getBody(LinkedHashMap.class);
map.keySet().stream().forEach( item -> exchange.getIn().setHeader(item.toString(),map.get(item)));
})
//This step is just to print the Headers. Doesnt do anything useful
.process( exchange -> {
log.info(String.valueOf(exchange.getIn().getHeaders()));
})
.transform().constant("{'httpResponse:200':'OK'}");