Могу ли я получить доступ к заголовкам в выражении кода состояния входящего адаптера канала http? - PullRequest
0 голосов
/ 10 мая 2018

У меня настроен адаптер входящего канала 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 Ответ

0 голосов
/ 10 мая 2018

Это выражение не получает доступа к requestMessage.Однако это действительно может иметь смысл.Не стесняйтесь поднимать JIRA по этому вопросу.

В качестве решения вашей проблемы я бы предложил настроить его следующим образом:

status-code-expression="T(org.springframework.web.context.request.RequestContextHolder).requestAttributes.request.method.equals('POST') ? 201 : 200"
...