Package io.netty.handler.codec.http
Class HttpContentDecoder
java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.handler.codec.MessageToMessageDecoder<HttpObject>
io.netty.handler.codec.http.HttpContentDecoder
- All Implemented Interfaces:
io.netty.channel.ChannelHandler,io.netty.channel.ChannelInboundHandler
- Direct Known Subclasses:
HttpContentDecompressor
public abstract class HttpContentDecoder
extends io.netty.handler.codec.MessageToMessageDecoder<HttpObject>
Decodes the content of the received
HttpRequest and HttpContent.
The original content is replaced with the new content decoded by the
EmbeddedChannel, which is created by newContentDecoder(String).
Once decoding is finished, the value of the 'Content-Encoding'
header is set to the target content encoding, as returned by getTargetContentEncoding(String).
Also, the 'Content-Length' header is updated to the length of the
decoded content. If the content encoding of the original is not supported
by the decoder, newContentDecoder(String) should return null
so that no decoding occurs (i.e. pass-through).
Please note that this is an abstract class. You have to extend this class
and implement newContentDecoder(String) properly to make this class
functional. For example, refer to the source code of HttpContentDecompressor.
This handler must be placed after HttpObjectDecoder in the pipeline
so that this handler can intercept HTTP requests after HttpObjectDecoder
converts ByteBufs into HTTP requests.
-
Nested Class Summary
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
io.netty.channel.ChannelHandler.Sharable -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidchannelInactive(io.netty.channel.ChannelHandlerContext ctx) voidchannelReadComplete(io.netty.channel.ChannelHandlerContext ctx) protected voiddecode(io.netty.channel.ChannelHandlerContext ctx, HttpObject msg, List<Object> out) protected StringgetTargetContentEncoding(String contentEncoding) Returns the expected content encoding of the decoded content.voidhandlerAdded(io.netty.channel.ChannelHandlerContext ctx) voidhandlerRemoved(io.netty.channel.ChannelHandlerContext ctx) protected abstract io.netty.channel.embedded.EmbeddedChannelnewContentDecoder(String contentEncoding) Returns a newEmbeddedChannelthat decodes the HTTP message content encoded in the specified contentEncoding.Methods inherited from class io.netty.handler.codec.MessageToMessageDecoder
acceptInboundMessage, channelReadMethods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredMethods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, isSharable
-
Field Details
-
ctx
protected io.netty.channel.ChannelHandlerContext ctx
-
-
Constructor Details
-
HttpContentDecoder
public HttpContentDecoder()
-
-
Method Details
-
decode
protected void decode(io.netty.channel.ChannelHandlerContext ctx, HttpObject msg, List<Object> out) throws Exception - Specified by:
decodein classio.netty.handler.codec.MessageToMessageDecoder<HttpObject>- Throws:
Exception
-
channelReadComplete
- Specified by:
channelReadCompletein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelReadCompletein classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
Exception
-
newContentDecoder
protected abstract io.netty.channel.embedded.EmbeddedChannel newContentDecoder(String contentEncoding) throws Exception Returns a newEmbeddedChannelthat decodes the HTTP message content encoded in the specified contentEncoding.- Parameters:
contentEncoding- the value of the"Content-Encoding"header- Returns:
- a new
EmbeddedChannelif the specified encoding is supported.nullotherwise (alternatively, you can throw an exception to block unknown encoding). - Throws:
Exception
-
getTargetContentEncoding
Returns the expected content encoding of the decoded content. This getMethod returns"identity"by default, which is the case for most decoders.- Parameters:
contentEncoding- the value of the"Content-Encoding"header- Returns:
- the expected content encoding of the new content
- Throws:
Exception
-
handlerRemoved
- Specified by:
handlerRemovedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerRemovedin classio.netty.channel.ChannelHandlerAdapter- Throws:
Exception
-
channelInactive
- Specified by:
channelInactivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelInactivein classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
Exception
-
handlerAdded
- Specified by:
handlerAddedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerAddedin classio.netty.channel.ChannelHandlerAdapter- Throws:
Exception
-