1
我有一個彈簧集成流程,需要一個「路由鍵」消息頭。如果不存在,我想發送一個HTTP 400響應給客戶端。我怎樣才能做到這一點?下面你會看到判斷路由密鑰方法,我可以確定路由密鑰是否作爲頭傳遞。Spring集成流量響應HTTP 400
@Bean
public IntegrationFlow webToRabbit(RabbitTemplate amqpTemplate)
{
return IntegrationFlows
.from
(
Http.inboundGateway("/tunnel")
.replyTimeout(Integer.valueOf(timeout))
.mappedRequestHeaders("*")
.mappedResponseHeaders("*")
)
.log()
.handle
(
Amqp.outboundGateway(amqpTemplate)
.exchangeName(exchangeName)
.routingKeyFunction(f->determineRoutingKey(f))
.mappedRequestHeaders("*")
.mappedReplyHeaders("*")
)
.log()
.bridge(null)
.get();
}
private String determineRoutingKey(Message<?> message)
{
MessageHeaders headers = message.getHeaders();
if(headers.containsKey(HEADER_ROUTINGKEY))
{
String routingKey = Objects.toString(headers.get(HEADER_ROUTINGKEY));
log.debug("Using routing key: " + routingKey);
return routingKey;
}
else
{
log.error("Headers found: " + Objects.toString(headers));
//Here I get an exception stating that MessageHeaaders is immutable
message.getHeaders().put(HttpHeaders.STATUS_CODE, HttpStatus.BAD_REQUEST);
return null;
}
}
在此先感謝您的幫助。
對不起,我不明白你的答案。 –
'HttpRequestHandlingEndpointSupport'可以正確解析標題中的狀態碼,並使用回覆'payload'作爲響應的主體。你不需要拋出任何異常。否則它只是'500'。您必須手動填充回覆,並在錯誤的情況下將「HttpHeaders.STATUS_CODE」添加到回覆消息中。 –
好吧,你可以拋出異常,但是你必須在'Http.inboundGateway()'中添加'errorChannel',把''HttpStatus.BAD_REQUEST''值的'HttpHeaders.STATUS_CODE'頭轉換爲正確的回覆。 –