Añadiendo Encabezados a TransportMessages
¿Cómo puedo agregar encabezados a un mensaje saliente?
Este ejemplo de conector muestra cómo puede agregar cualquier número de encabezados a los mensajes enviados por un SendingConnector.
Los encabezados se crean durante la conversión de un tipo de destino en un TransportMessage etapa, como se describe en Etapas.
Implementando un SendTransportMessageConverter
El componente que realiza la transformación en un TransportMessage se llama un SendTransportMessageConverter.
Para ver cómo registrar su convertidor con un conector, consulte esto página de inicio.
A continuación se presenta un convertidor de muestra que crea condicionalmente algunos encabezados y los añade al transport message:
SendTransportMessageConverter<YourTargetType> converter() {
return toSend -> {
MessageHeaders headers = /*condition*/
? new MessageHeaders("foo", "bar") (1)
: new MessageHeaders(Map.of("foo", "bar", "baz", "qux")); (2)
if (/*another condition*/) {
headers = headers.putHeader("a", "b") (3)
} else {
headers = headers.putHeaders(Map.of("c", MultiValueHeader.of("d", "e"))) (4)
}
return new TransportMessage(headers, SerializationHelper.objectToString(toSend)); (5)
}
}
| 1 | Creando un MessageHeaders instancia con solo un encabezado (foo) manteniendo un solo valor (bar) |
| 2 | Creando un MessageHeaders instancia de un Map, cada par clave-valor correspondiente a un nombre de encabezado y su valor |
| 3 | Observe la asignación a headers--MessageHeaders es un tipo inmutable, por lo que putHeader crea una nueva instancia que contiene el adicional a encabezado |
| 4 | También es posible crear un encabezado de múltiples valores — solo use una instancia de MultiValueHeader escriba como un envoltorio para sus valores |
| 5 | Finalmente, no olvide crear el resultado TransportMessage con la instancia correcta de MessageHeaders |