Проблема с Spring Integration HttpRequestExecutingMessageHandler в HEADERS

Проверяя заголовки HttpRequestExecutingMessageHandler, я замечаю общий заголовок, accept-encoding, gzip, который выдает исключение при ответе на этапе преобразования, то есть сообщение не может быть преобразовано, вызывая ошибку при ответе. Это мое предположение связано с используемым незамедлительным HttpClient.

Есть ли причина помещать этот заголовок в RestTemplate по умолчанию? После удаления заголовка с помощью фильтра заголовка запрос Rest прошел нормально.

Также я попытался использовать RestTemplate, но заголовок остался там, поэтому работал только фильтр заголовка.

Но при внутреннем тестировании (с использованием HTTP Rest для подключения отдельных экземпляров интеграции) все работало нормально, то есть сообщение заголовка обрабатывается нормально (и я не знаю причины, поскольку проблема out. Возникла с исходящими RestServers.

Пример потока показан ниже.

С уважением,

**

IntegrationFlows.from("theRequestChannel")
                    .transform(Transformers.fromJson(MyClass.class))
                    .enrichHeaders(m -> m.header("app_id", "appid"))
                    .enrichHeaders(m -> m.header("app_key", "app_key"))
                    .headerFilter("accept-encoding")
                    .handle(myHandler())
                    .get();

**


person Jose Carlos Canova    schedule 21.05.2018    source источник
comment
Извините за опечатки ... незаменимая подкладка ...   -  person Jose Carlos Canova    schedule 21.05.2018


Ответы (1)


Совершенно непонятно, о чем вы спрашиваете. В Spring Integration нет автоматического заголовка accept-encoding. Я могу предположить, что у вас есть адаптер входящего канала HTTP, и этот заголовок отправляется внешним клиентом вашему приложению.

Если службе REST, которую вам нужно вызвать, действительно не нравятся эти заголовки, это действительно хороший выбор filter такой заголовок перед выполнением запроса. Такой заголовок не настроен на RestTemplate, поскольку вы не исключаете его оттуда, а фильтруете до достижения этого RestTemplate.

Другой вариант, который вы можете рассмотреть, - это DefaultHttpHeaderMapper с его setOutboundHeaderNames() для настройки набора шаблонов заголовков для передачи из сообщения в HTTP-запрос. Конечно, не считая упомянутого accept-encoding.

person Artem Bilan    schedule 21.05.2018
comment
Действительно, я использовал setOutboundHeaderNames .. и поместил заголовки в * ... и на самом деле UnitTest использует HC ... например CloseableHttpClient httpclient = HttpClients.createDefault (); и я не устанавливаю заголовок на клиенте HC. - person Jose Carlos Canova; 21.05.2018
comment
Сменим тест на SOAPUI и посмотрим, что будет. - person Jose Carlos Canova; 21.05.2018
comment
Вы правы ... SOAPUI, использующий HCHttpComponents, добавляет кодировку содержимого: gzip, deflate ... POST localhost: 8080 / enroll HTTP / 1.1 Accept-Encoding: gzip, deflate Content-Type: application / json Content-Length: 108 Host: localhost: 8080 Connection: Keep-Alive User-Agent: Apache-HttpClient / 4.1.1 (java 1.5) - person Jose Carlos Canova; 21.05.2018
comment
Но что не совсем понятно, так это то, почему мне нужно фильтровать запрос, чтобы избежать исключения при ответе. поскольку выдает исключение, когда преобразует ответ из JSON в Object. - person Jose Carlos Canova; 21.05.2018
comment
Поскольку входящие заголовки HTTP по умолчанию сопоставляются с заголовками сообщений. И когда мы отправляем HTTP-запрос, мы также по умолчанию сопоставляем все заголовки. Как я уже сказал: вы получаете этот заголовок для своего приложения из внешнего запроса. Другое дело, почему такой gzip accept-encoding не работает для вас, и вам следует проконсультироваться с поставщиком вашей службы REST. - person Artem Bilan; 21.05.2018