Package org.springframework.http.codec.protobuf

# 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 `Message`s 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:
  - `ProtobufEncoder`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final int`
`DEFAULT_MESSAGE_MAX_SIZE`
The default max size for aggregating messages.

## Constructor Summary

Constructors
Constructor
Description
`ProtobufDecoder()`
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>`
`getDecodableMimeTypes()`
`int`
`getMaxMessageSize()`
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:
  - Constant Field Values

## 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>`