Spring Integration объединяет переменные пути и тело сообщения в выражении полезной нагрузки

Используя входящий шлюз http, я могу указать выражение полезной нагрузки с помощью SPEL, которое будет получать доступ к заголовку, requestParams и pathVariables. Как мне также включить тело из POST? Пример того, что у меня сейчас есть

<int-http:inbound-gateway path="/document/{product}/{id}/blah"
                          supported-methods="GET"
                          request-channel="documentService.blah"
                          reply-channel="httpReplyChannel"
                          message-converters="jsonMessageConverter"
                          header-mapper="defaultHttpHeaderMapper"
                          payload-expression="new RequestDTO(
                                                 #pathVariables.product,
                                                 #pathVariables.id,
                                                 #requestParams['optionalParam'],
                                                 headers.get('headerKey')) />

Это отлично работает, однако я хочу добавить дополнительный параметр в конструктор RequestDTO, который является фактическим телом сообщения (очевидно, я изменю метод) и сериализовать его в соответствующий тип.

Это возможно? Заранее спасибо.


person sevenstripe    schedule 19.09.2013    source источник


Ответы (1)


Да, это возможно. payload-expression использует EvaluationContext с HttpEntity как rootObject, #requestParams и < strong>#pathVariables переменные. Итак, если вы измените его на POST, вы можете получить тело!:

 payload-expression="new RequestDTO(
                         #pathVariables.product,
                         #pathVariables.id,
                         #requestParams['optionalParam'],
                         headers.get('headerKey'),
                         body)" 

Просто потому, что у HttpEntity есть геттер!

person Artem Bilan    schedule 19.09.2013
comment
Артем, спасибо, что очищает не только тело. Я так и не понял, в каком контексте использовалось выражение полезной нагрузки. Я уверен, что это то, что я просматривал несколько раз в документах, и это просто не щелкнуло. Спасибо за полный ответ! - person sevenstripe; 19.09.2013