处理Spring Integration中的http响应

时间:2014-12-04 11:41:46

标签: java spring spring-integration

我有http:outbound-gateway如下:

 <int:channel id="fromEmployeeChannel" />
 <int-http:outbound-gateway
        url="localhost:8080/api/employees" request-channel="fromEmployeeChannel"
        http-method="POST" expected-response-type="java.lang.String" reply-channel="employeeAdded" >
 </int-http:outbound-gateway>

如何处理不同的HTTP响应状态?如果我收到404 Not Found这样的错误,如何处理错误?

1 个答案:

答案 0 :(得分:0)

HttpRequestExecutingMessageHandlerresponse status填充到replyMessage标题:

replyBuilder.setHeader(org.springframework.integration.http.HttpHeaders.STATUS_CODE, httpResponse.getStatusCode());

因此,您可以在<header-value-router>下游<int-http:outbound-gateway>向不同的渠道发送不同逻辑的响应。

404和类似内容由DefaultResponseErrorHandler中的RestTemplate(默认值)处理,并从那里被抛出为异常:HttpClientErrorExceptionHttpServerErrorException,相应地。或者甚至喜欢RestClientException("Unknown status code [" + statusCode + "]")

首先,这个异常被抛到上游,例如在轮询或消息驱动的端点上<gateway>error-channel

但是从另一方面来说,你可以在<int-http:outbound-gateway>上完全按照它们做一些逻辑。为此,它有<int-http:request-handler-advice-chain>并且内置ExpressionEvaluatingRequestHandlerAdvice能够执行某些操作onFailureExpressionhttp://docs.spring.io/spring-integration/docs/latest-ga/reference/html/messaging-endpoints-chapter.html#message-handler-advice-chain