1
私はスプリング統合でエラーフローを定義しようとしています。私はhttp呼び出しを行う前に、私が処理したいリソースのカスタムヘッダーの形でIDを設定していますが、これはエラー(2xxのhttpコードではありません)を返します。したがって、GenericTransformクラスを定義してエラーを返し、リソースのIDも取得します(headeRから抽出します)。しかし、これはそのようには動作していないようで、HTTPコードが実行される前に定義されたカスタムヘッダにアクセスすることはできません。httpエラーを受け取った後にSpringインテグレーションのカスタムヘッダにアクセスする方法
これはどのように達成できますか?下のコードでは、カスタムヘッダー(messageId)を追加できますが、http呼び出しが失敗したHTTPコードを返した場合、ヘッダーとその値が失われています。
@Bean
public IntegrationFlow makeHttpCall() {
return message -> message
.enrich(e -> e
.requestPayload(Message::getPayload)
.shouldClonePayload(false)
.<Map<String, String>>headerFunction("messageId", m -> m.getPayload().substring(0,10), true)
)
.handle(makeHttpRequest())
.transform(new GenericTransformer<Message<ResponseEntity>, Message<ResponseEntity>>() {
@Override
public Message<ResponseEntity> transform(Message<ResponseEntity> message) {
if (message.getHeaders().get("http_statusCode").equals("http_statusCode=200")) {
//This is failing, only http headers available
logger.debug("Response from the endpoint: " + message.getPayload());
return message;
} else {
String messageId = message.getHeaders().get("messageId").toString();
MutableMessageHeaders headers = new MutableMessageHeaders(message.getHeaders());
headers.put("error_message", "1");
headers.put("messageId", messageId);
return new GenericMessage<ResponseEntity>(message.getPayload(), headers);
}
}
})
.channel("entrypoint");
}
アイデアを高く評価します。
あなたは 'makeHttpRequest()'を表示する必要があります。 –