В маршруте Apache Camel я хочу взять несколько заголовков и безопасно составить их в строку HTTP-запроса.Единственные примеры, которые я нашел, либо используют constant (), который бесполезен для построения строк динамического запроса, либо они используют simple (), который не предлагает экранирование URL.
Например, возьмем следующеефрагмент справа от документации компонента HTTP:
from("direct:start")
.setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
.to("http://oldhost");
Это 90% пути, но что, если вы не всегда хотите идентификатор заказа 123?Мы хотели бы иметь возможность заменить значение заголовка здесь.Итак, следующая логическая версия - переключиться на простое:
from("direct:start")
.setHeader(Exchange.HTTP_QUERY, simple("order=${header.orderId}&detail=short"))
.to("http://oldhost");
Но главная проблема заключается в том, что URL не кодируется.Это означает, что пробел (или любой зарезервированный символ) в header.orderId приводит к исключению, выдаваемому компонентом HTTP для недопустимой строки запроса.
Таким образом, единственный оставшийся способ - использовать JavaScript, который оченьмногословно для чего-то подобного или для написания собственного процессора.Похоже, что это должно быть что-то встроенное, поэтому я прошу здесь, чтобы посмотреть, не хватает ли мне очевидного / нормального способа сделать то, что я ищу здесь?