Class EmbeddedHeadersJsonMessageMapper

java.lang.Object
org.springframework.integration.support.json.EmbeddedHeadersJsonMessageMapper
All Implemented Interfaces:
BytesMessageMapper, InboundMessageMapper<byte[]>, OutboundMessageMapper<byte[]>

public class EmbeddedHeadersJsonMessageMapper extends Object implements BytesMessageMapper
For outbound messages, uses a message-aware Jackson JSON mapper to render the message as JSON. For messages with byte[] payloads, if rendered as JSON, Jackson performs Base64 conversion on the bytes. If payload is byte[] and the rawBytes property is true (default), the result has the form [headersLen][headers][payloadLen][payload]; with the headers rendered in JSON and the payload unchanged. Otherwise, message is fully serialized and deserialized with Jackson JSON mapper.

By default, all headers are included; you can provide simple patterns to specify a subset of headers.

If neither expected format is detected, nor an error occurs during conversion, the payload of the message is the original byte[].

IMPORTANT

The default JSON mapper will only deserialize classes in certain packages.

        "java.util",
        "java.lang",
        "org.springframework.messaging.support",
        "org.springframework.integration.support",
        "org.springframework.integration.message",
        "org.springframework.integration.store",
        "org.springframework.integration.history",
        "org.springframework.integration.handler"
 

To add more packages, create an JSON mapper using JacksonMessagingUtils.messagingAwareMapper(String...).

A constructor is provided allowing the provision of such a configured JSON mapper.

Since:
7.0
Author:
Jooyoung Pyoung
  • Field Details

    • logger

      protected final Log logger
  • Constructor Details

    • EmbeddedHeadersJsonMessageMapper

      public EmbeddedHeadersJsonMessageMapper()
      Construct an instance that embeds all headers, using the default JSON Object mapper.
    • EmbeddedHeadersJsonMessageMapper

      public EmbeddedHeadersJsonMessageMapper(String... headerPatterns)
      Construct an instance that embeds headers matching the supplied patterns, using the default JSON object mapper.
      Parameters:
      headerPatterns - the patterns.
      See Also:
    • EmbeddedHeadersJsonMessageMapper

      public EmbeddedHeadersJsonMessageMapper(tools.jackson.databind.json.JsonMapper jsonMapper)
      Construct an instance that embeds all headers, using the supplied JSON object mapper.
      Parameters:
      jsonMapper - the JSON mapper.
    • EmbeddedHeadersJsonMessageMapper

      public EmbeddedHeadersJsonMessageMapper(tools.jackson.databind.json.JsonMapper jsonMapper, String... headerPatterns)
      Construct an instance that embeds headers matching the supplied patterns using the supplied JSON object mapper.
      Parameters:
      jsonMapper - the JSON mapper.
      headerPatterns - the patterns.
  • Method Details

    • setRawBytes

      public void setRawBytes(boolean rawBytes)
      For messages with byte[] payloads, if rendered as JSON, Jackson performs Base64 conversion on the bytes. If this property is true (default), the result has the form [headersLen][headers][payloadLen][payload]; with the headers rendered in JSON and the payload unchanged. Set to false to render the bytes as base64.
      Parameters:
      rawBytes - false to encode as base64.
    • setCaseSensitive

      public void setCaseSensitive(boolean caseSensitive)
      Set to true to make the header name pattern match case-sensitive. Default false.
      Parameters:
      caseSensitive - true to make case-sensitive.
    • getHeaderPatterns

      public Collection<String> getHeaderPatterns()
    • fromMessage

      public byte[] fromMessage(Message<?> message)
      Specified by:
      fromMessage in interface BytesMessageMapper
      Specified by:
      fromMessage in interface OutboundMessageMapper<byte[]>
    • toMessage

      public Message<?> toMessage(byte[] bytes, @Nullable Map<String,Object> headers)
      Description copied from interface: InboundMessageMapper
      Convert a provided object to the Message and supply with headers if necessary and provided.
      Specified by:
      toMessage in interface BytesMessageMapper
      Specified by:
      toMessage in interface InboundMessageMapper<byte[]>
      Parameters:
      bytes - the object for message payload or some other conversion logic
      headers - additional headers for building message. Can be null
      Returns:
      the message as a result of mapping