我最近從Spring Integration 4.1.3更新到4.2.6,並注意到我開始從http:inbound-gateway
獲得500響應。 經調查,這是由於一個空的答覆,並在MessagingGatewaySupport彈簧集成http:入站通道適配器錯誤通道
if (reply == null && this.errorOnTimeout) {
解釋這是一個超時網關這是有道理的,所以我改變了這一個http:inbound-channel-adapter
,它解決了這個問題,但隨後的錯誤處理沒有按」噸行爲如預期。
我以前曾與
<int-http:inbound-gateway id="inboundGateway" request-channel="httpInChannel" reply-channel="httpResponseChannel" path="/**/status*" supported-methods="POST" error-channel="httpErrorChannel"/>
<int:chain input-channel="httpInChannel" output-channel="serviceChannel">
...
</int:chain>
<int:chain input-channel="httpErrorChannel">
<int:header-enricher>
<int:header name="http_statusCode" value="500" />
</int:header-enricher>
<int:transformer expression="payload.localizedMessage" />
</int:chain>
<int:service-activator input-channel="serviceChannel" ref="someController" method="someVoidMethod"/>
網關上的錯誤通道我懷疑它可能無法正常工作,但是我修改這個稍微
<int-http:inbound-channel-adapter id="inboundAdapter" channel="httpInChannel" path="/**/status*" supported-methods="POST" error-channel="httpErrorChannel"/>
<int:chain input-channel="httpInChannel" output-channel="serviceChannel">
...
</int:chain>
<int:chain input-channel="httpErrorChannel">
<int:header-enricher>
<int:header name="http_statusCode" value="500" />
</int:header-enricher>
<int:transformer expression="payload.localizedMessage" />
</int:chain>
<int:service-activator input-channel="serviceChannel" ref="someController" method="someVoidMethod"/>
現在,它工作正常正常有效POST請求,但是如果我發送了一個無效的消息,那個錯誤,我得到了一個500響應,並帶有完整的錯誤堆棧響應(試圖改變頭文件中的狀態碼)。該錯誤是
org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
這使得作爲error-channel
不具有輸出(雖然它在docs任http://docs.spring.io/spring-integration/docs/4.3.0.RELEASE/reference/htmlsingle/#http-response-statuscode不一樣)感。 有沒有方法以類似於網關的方式更改入站適配器的錯誤響應?