3

我有一个这样配置的 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>

我想让它回复 201POST请求和 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

我在这里使用了错误的语法还是在那个阶段没有这些细节?

我已经在建议网关的地方看到了这个问题,但我现在想坚持使用适配器。

4

1 回答 1

2

该表达式无法访问requestMessage. 然而,它真的可能是有道理的。随意就此事提出 JIRA。

作为解决您的问题的方法,我建议将其配置为如下表达式:

status-code-expression="T(org.springframework.web.context.request.RequestContextHolder).requestAttributes.request.method.equals('POST') ? 201 : 200"
于 2018-05-10T14:14:22.273 回答