Можно ли получить доступ к заголовкам в выражении кода состояния входящего адаптера канала 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(&quot;POST&quot;) ? 201 : 200
  • :headers[http_requestMethod].equals(&quot;POST&quot;) ? 201 : 200
  • &quot;POST&quot;.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"
Другие вопросы по тегам