Можно ли получить доступ к заголовкам в выражении кода состояния входящего адаптера канала http?
У меня есть адаптер входящего канала HTTP, настроенный так:
<int-http:inbound-channel-adapter id="/api/requests"
channel="httpRequestsChannel"
path="/requests"
supported-methods="POST,OPTIONS">
<int-http:cross-origin allow-credentials="false" allowed-headers="*" origin="*" />
</int-http:inbound-channel-adapter>
Я хотел бы, чтобы ответить 201 на POST
запросы и 200 другим (т.е. OPTIONS
), но ни один из:
headers.get('http_requestMethod').equals("POST") ? 201 : 200
:headers[http_requestMethod].equals("POST") ? 201 : 200
"POST".equals(:headers['http_requestMethod']) ? 201 : 200
для status-code-expression
Атрибут сработал, большинство из них заканчиваются неудачной инициализацией контекста с помощью:
IllegalStateException: No node
Я использую здесь неправильный синтаксис или эти детали не доступны на этом этапе?
Я видел этот вопрос, где предлагается шлюз, но сейчас я хотел бы придерживаться адаптера.
1 ответ
Решение
Это выражение не получает доступ к requestMessage
, Однако это действительно может иметь смысл. Не стесняйтесь поднять JIRA по этому вопросу.
В качестве решения вашей проблемы я бы предложил настроить его следующим образом:
status-code-expression="T(org.springframework.web.context.request.RequestContextHolder).requestAttributes.request.method.equals('POST') ? 201 : 200"