Работая с apache верблюдом, я нашел что-то интересное, что-то, что я должен исправить в моем случае ... Итак, у меня есть POST-маршрут, который работает на разных типах URL и т. Д. c, я имею в виду, я должен получить тело http внутри моего процессора.
Я должен быть в состоянии прочитать, например, этот:
curl -X POST -d'a=b' http://localhost:8080/........ (DOESN'T WORK)
или (что то же самое)
curl -X POST --data 'a=b' http://localhost:8080/........ (DOESN'T WORK)
И это не работа! Но это работает, когда я добавляю заголовок Content-type в запрос:
curl -X POST -H"Content-type: application/json" -X POST -d'a=b' http://localhost:8080/........ (WORKS)
или ДАЖЕ НЕВЕРНО (!!)
curl -X POST -H"Content-type: xxxxxxx" -X POST -d'a=b' http://localhost:8080/........ (WORKS)
it WORKS !
(на всякий случай, как мне получить тело в коде в процессоре):
String mainBody = exchange.getIn().getBody(String.class);
if(mainBody == null || mainBody.isEmpty()) {
LOG.error("EMPTY!");
} else {
LOG.error("FOUND " + mainBody);
}
Странная вещь? Во время отладки понял, что по умолчанию Content-type это application / x- www-form-urlencoded. И когда я делаю
curl -X POST -H"Content-type: application/x-www-form-urlencoded" -X POST -d'a=b' http://localhost:8080/........ (DOESN'T WORK)
, это не работает тоже.
Итак, моя проблема в том, как заставить это работать всегда? У меня нет некоторых специальных форматов, типов контента и т. Д. c, моя вещь должна просто перенаправить все тело третьему лицу, и оно должно потреблять все типы контента (даже если не указано). Как я могу это сделать?
PS Мой XML конфиг -
<rests id="rests" xmlns="http://camel.apache.org/schema/spring">
<rest id="rest-custom">
.....
<post uri="/?matchOnUriPrefix=true&bridgeEndpoint=true" method="POST">
<description>....</description>
<route>
<process ref="unknownPostRedirectProcessor" />
<to uri="direct:commonRoute" />
</route>
</post>
</rest>
Этот "пост" перехватывает все почтовые запросы и работает нормально, кроме описанной проблемы.