Top Description Fields Constructors Methods
org.springframework.http.codec.protobuf

public Class ProtobufEncoder

extends ProtobufCodecSupport
implements HttpMessageEncoder<Message>
Class Inheritance
All Implemented Interfaces
org.springframework.http.codec.HttpMessageEncoder, org.springframework.core.codec.Encoder
Imports
java.io.IOException, java.util.Arrays, .Collections, .List, .Map, com.google.protobuf.Message, org.reactivestreams.Publisher, reactor.core.publisher.Flux, .Mono, org.springframework.core.ResolvableType, org.springframework.core.io.buffer.DataBuffer, .DataBufferFactory, org.springframework.http.MediaType, org.springframework.http.codec.HttpMessageEncoder, org.springframework.lang.Nullable, org.springframework.util.FastByteArrayOutputStream, .MimeType

An Encoder that writes com.google.protobuf.Messages using Google Protocol Buffers.

Flux are serialized using delimited Protobuf messages with the size of each message specified before the message itself. Single values are serialized using regular Protobuf message format (without the size prepended before the message).

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

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

Author
Sebastien Deleuze
Since
5.1
See Also
ProtobufDecoder

Field Summary

Modifier and TypeField and Description
private static final List<MediaType>
Inherited from org.springframework.http.codec.protobuf.ProtobufCodecSupport:
DELIMITED_KEYDELIMITED_VALUEMIME_TYPES

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public boolean
canEncode(ResolvableType
the type of elements in the source stream
elementType
,
MimeType
the MIME type for the output stream (can be null if not specified)
mimeType
)

Implements org.springframework.core.codec.Encoder.canEncode.

Whether the encoder supports the given source element type and the MIME type for the output stream.

public Flux<DataBuffer>
encode(Publisher<? extends Message>
the input stream of Objects to encode. If the input should be encoded as a single value rather than as a stream of elements, an instance of Mono should be used.
inputStream
,
DataBufferFactory
for creating output stream DataBuffer's
bufferFactory
,
ResolvableType
the expected type of elements in the input stream; this type must have been previously passed to the canEncode method and it must have returned true.
elementType
,
MimeType
the MIME type for the output content (optional)
mimeType
,
Map<String, Object>
additional information about how to encode
hints
)

Implements org.springframework.core.codec.Encoder.encode.

Encode a stream of Objects of type T into a DataBuffer output stream.

public DataBuffer
encodeValue(Message
the value to be encoded
message
,
DataBufferFactory
for creating the output DataBuffer
bufferFactory
,
ResolvableType
the type for the value being encoded
valueType
,
MimeType
the MIME type for the output content (optional)
mimeType
,
Map<String, Object>
additional information about how to encode
hints
)

Overrides default org.springframework.core.codec.Encoder.encodeValue.

Encode an Object of type T to a data buffer.

private DataBuffer
encodeValue(Message message, DataBufferFactory bufferFactory, boolean delimited)

public List<MimeType>
getEncodableMimeTypes()

Implements org.springframework.core.codec.Encoder.getEncodableMimeTypes.

Return the list of MIME types supported by this Encoder.

public List<MediaType>
getStreamingMediaTypes()

Implements org.springframework.http.codec.HttpMessageEncoder.getStreamingMediaTypes.

Return "streaming" media types for which flushing should be performed automatically vs at the end of the input stream.

Inherited from org.springframework.http.codec.protobuf.ProtobufCodecSupport:
getMimeTypessupportsMimeType

Field Detail

streamingMediaTypesback to summary
private static final List<MediaType> streamingMediaTypes

Constructor Detail

ProtobufEncoderback to summary
public ProtobufEncoder()

Method Detail

canEncodeback to summary
public boolean canEncode(ResolvableType elementType, MimeType mimeType)

Implements org.springframework.core.codec.Encoder.canEncode.

Doc from org.springframework.core.codec.Encoder.canEncode.

Whether the encoder supports the given source element type and the MIME type for the output stream.

Parameters
elementType:ResolvableType

the type of elements in the source stream

mimeType:MimeType

the MIME type for the output stream (can be null if not specified)

Returns:boolean

true if supported, false otherwise

Annotations
@Override
encodeback to summary
public Flux<DataBuffer> encode(Publisher<? extends Message> inputStream, DataBufferFactory bufferFactory, ResolvableType elementType, MimeType mimeType, Map<String, Object> hints)

Implements org.springframework.core.codec.Encoder.encode.

Doc from org.springframework.core.codec.Encoder.encode.

Encode a stream of Objects of type T into a DataBuffer output stream.

Parameters
inputStream:Publisher<? extends Message>

the input stream of Objects to encode. If the input should be encoded as a single value rather than as a stream of elements, an instance of Mono should be used.

bufferFactory:DataBufferFactory

for creating output stream DataBuffer's

elementType:ResolvableType

the expected type of elements in the input stream; this type must have been previously passed to the canEncode method and it must have returned true.

mimeType:MimeType

the MIME type for the output content (optional)

hints:Map<String, Object>

additional information about how to encode

Returns:Flux<DataBuffer>

the output stream

Annotations
@Override
encodeValueback to summary
public DataBuffer encodeValue(Message message, DataBufferFactory bufferFactory, ResolvableType valueType, MimeType mimeType, Map<String, Object> hints)

Overrides default org.springframework.core.codec.Encoder.encodeValue.

Doc from org.springframework.core.codec.Encoder.encodeValue.

Encode an Object of type T to a data buffer. This is useful for scenarios, that distinct messages (or events) are encoded and handled individually, in fully aggregated form.

By default this method raises UnsupportedOperationException and it is expected that some encoders cannot produce a single buffer or cannot do so synchronously (e.g. encoding a Resource).

Parameters
message:Message

the value to be encoded

bufferFactory:DataBufferFactory

for creating the output DataBuffer

valueType:ResolvableType

the type for the value being encoded

mimeType:MimeType

the MIME type for the output content (optional)

hints:Map<String, Object>

additional information about how to encode

Returns:DataBuffer

the encoded content

Annotations
@Override
encodeValueback to summary
private DataBuffer encodeValue(Message message, DataBufferFactory bufferFactory, boolean delimited)
getEncodableMimeTypesback to summary
public List<MimeType> getEncodableMimeTypes()

Implements org.springframework.core.codec.Encoder.getEncodableMimeTypes.

Doc from org.springframework.core.codec.Encoder.getEncodableMimeTypes.

Return the list of MIME types supported by this Encoder. The list may not apply to every possible target element type and calls to this method should typically be guarded via canEncode(elementType, null). The list may also exclude MIME types supported only for a specific element type. Alternatively, use getEncodableMimeTypes(ResolvableType) for a more precise list.

Returns:List<MimeType>

the list of supported MIME types

Annotations
@Override
getStreamingMediaTypesback to summary
public List<MediaType> getStreamingMediaTypes()

Implements org.springframework.http.codec.HttpMessageEncoder.getStreamingMediaTypes.

Doc from org.springframework.http.codec.HttpMessageEncoder.getStreamingMediaTypes.

Return "streaming" media types for which flushing should be performed automatically vs at the end of the input stream.

Annotations
@Override