Class ProtobufDecoder

java.lang.Object
org.springframework.http.codec.protobuf.ProtobufCodecSupport
org.springframework.http.codec.protobuf.ProtobufDecoder
All Implemented Interfaces:
org.springframework.core.codec.Decoder<com.google.protobuf.Message>

public class ProtobufDecoder extends ProtobufCodecSupport implements org.springframework.core.codec.Decoder<com.google.protobuf.Message>
A Decoder that reads Messages using Google Protocol Buffers.

Flux deserialized via decode(Publisher, ResolvableType, MimeType, Map) are expected to use delimited Protobuf messages with the size of each message specified before the message itself. Single values deserialized via decodeToMono(Publisher, ResolvableType, MimeType, Map) are expected to use regular Protobuf message format (without the size prepended before the message).

Notice that default instance of Protobuf message produces empty byte array, so Mono.just(Msg.getDefaultInstance()) sent over the network will be deserialized as an empty Mono.

To generate Message Java classes, you need to install the protoc binary.

This decoder requires Protobuf 3 or higher, and supports "application/x-protobuf" and "application/octet-stream" with the official "com.google.protobuf:protobuf-java" library.

Since:
5.1
Author:
Sebastien Deleuze
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected static final int
    The default max size for aggregating messages.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Construct a new ProtobufDecoder.
    ProtobufDecoder(com.google.protobuf.ExtensionRegistry extensionRegistry)
    Construct a new ProtobufDecoder with an initializer that allows the registration of message extensions.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    canDecode(org.springframework.core.ResolvableType elementType, org.springframework.util.MimeType mimeType)
     
    reactor.core.publisher.Flux<com.google.protobuf.Message>
    decode(Publisher<org.springframework.core.io.buffer.DataBuffer> inputStream, org.springframework.core.ResolvableType elementType, org.springframework.util.MimeType mimeType, Map<String,Object> hints)
     
    com.google.protobuf.Message
    decode(org.springframework.core.io.buffer.DataBuffer dataBuffer, org.springframework.core.ResolvableType targetType, org.springframework.util.MimeType mimeType, Map<String,Object> hints)
     
    reactor.core.publisher.Mono<com.google.protobuf.Message>
    decodeToMono(Publisher<org.springframework.core.io.buffer.DataBuffer> inputStream, org.springframework.core.ResolvableType elementType, org.springframework.util.MimeType mimeType, Map<String,Object> hints)
     
    List<org.springframework.util.MimeType>
     
    int
    Return the configured message size limit.
    void
    setMaxMessageSize(int maxMessageSize)
    The max size allowed per message.

    Methods inherited from class org.springframework.http.codec.protobuf.ProtobufCodecSupport

    getMimeTypes, supportsMimeType

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.springframework.core.codec.Decoder

    getDecodableMimeTypes
  • Field Details

    • DEFAULT_MESSAGE_MAX_SIZE

      protected static final int DEFAULT_MESSAGE_MAX_SIZE
      The default max size for aggregating messages.
      See Also:
  • Constructor Details

    • ProtobufDecoder

      public ProtobufDecoder()
      Construct a new ProtobufDecoder.
    • ProtobufDecoder

      public ProtobufDecoder(com.google.protobuf.ExtensionRegistry extensionRegistry)
      Construct a new ProtobufDecoder with an initializer that allows the registration of message extensions.
      Parameters:
      extensionRegistry - a message extension registry
  • Method Details

    • setMaxMessageSize

      public void setMaxMessageSize(int maxMessageSize)
      The max size allowed per message.

      By default, this is set to 256K.

      Parameters:
      maxMessageSize - the max size per message, or -1 for unlimited
    • getMaxMessageSize

      public int getMaxMessageSize()
      Return the configured message size limit.
      Since:
      5.1.11
    • canDecode

      public boolean canDecode(org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType)
      Specified by:
      canDecode in interface org.springframework.core.codec.Decoder<com.google.protobuf.Message>
    • decode

      public reactor.core.publisher.Flux<com.google.protobuf.Message> decode(Publisher<org.springframework.core.io.buffer.DataBuffer> inputStream, org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints)
      Specified by:
      decode in interface org.springframework.core.codec.Decoder<com.google.protobuf.Message>
    • decodeToMono

      public reactor.core.publisher.Mono<com.google.protobuf.Message> decodeToMono(Publisher<org.springframework.core.io.buffer.DataBuffer> inputStream, org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints)
      Specified by:
      decodeToMono in interface org.springframework.core.codec.Decoder<com.google.protobuf.Message>
    • decode

      public com.google.protobuf.Message decode(org.springframework.core.io.buffer.DataBuffer dataBuffer, org.springframework.core.ResolvableType targetType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints) throws org.springframework.core.codec.DecodingException
      Specified by:
      decode in interface org.springframework.core.codec.Decoder<com.google.protobuf.Message>
      Throws:
      org.springframework.core.codec.DecodingException
    • getDecodableMimeTypes

      public List<org.springframework.util.MimeType> getDecodableMimeTypes()
      Specified by:
      getDecodableMimeTypes in interface org.springframework.core.codec.Decoder<com.google.protobuf.Message>