zugreifen Ich versuche, einen Fehlerfluss mit Feder Integration zu definieren. Bevor ich einen HTTP-Aufruf mache, setze ich eine ID in Form eines benutzerdefinierten Headers für die Ressource, die ich verarbeiten möchte - dies gibt jedoch einen Fehler (nicht 2xx http-Code) zurück, also definiere ich die GenericTransform-Klasse, um die zu entfernen Fehler und nimm auch die ID der Ressource (entziehe das vom headerR). Aber das scheint nicht so zu funktionieren und ich habe keinen Zugriff mehr auf meine benutzerdefinierten Header, die vor der Ausführung des HTTP-Codes definiert wurden.Wie auf benutzerdefinierte Header in Spring-Integration nach dem Empfang http-Fehler
Wie kann dies erreicht werden? Im folgenden Code kann ich einen benutzerdefinierten Header (messageId) hinzufügen, aber wenn der http-Aufruf einen erfolglosen http-Code zurückgibt, dann verliere ich den Header und seinen Wert - das funktioniert gut, wenn eine erfolgreiche Antwort nach dem Aufruf des http-Endpunkts kommt.
@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");
}
Alle Ideen sehr geschätzt.
Sie müssen 'makeHttpRequest()' anzeigen. –