Работая с apache camel, я нашел кое-что интересное, кое-что, что я должен исправить в моем случае... Итак, у меня есть маршрут POST, который работает с разными типами URL-адресов и т. д., я имею в виду, что я должен получить тело 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)
это РАБОТАЕТ!
(На всякий случай, как я получаю тело в коде в Processor):
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)
это тоже не работает.
Итак, моя проблема заключается в том, как заставить его работать всегда? У меня нет каких-то специальных форматов, типов контента и т. Д., Моя вещь должна просто перенаправлять все тело третьей стороне и использовать все типы контента (даже если они не указаны). Как я могу это сделать?
P.S. Моя конфигурация 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>
Этот «пост» перехватывает все почтовые запросы и работает нормально, за исключением описанной проблемы.