我可以在 http 通道入站适配器状态代码表达式中访问 headers 吗?

Can I access headers in http channel inbound adapter status code expression?

我有一个这样配置的 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),但是 none of:

对于 status-code-expression 属性有效,它们中的大多数以失败的上下文初始化结束:

IllegalStateException: No node

我是不是在这里使用了错误的语法,或者那些细节在那个阶段不可用?

我看到 this question 建议使用网关,但我现在想坚持使用适配器。

该表达式无法访问 requestMessage。但它确实可能是有道理的。随时就此事提出 JIRA。

为了解决您的问题,我建议像这样配置它:

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