netty 4.0.23中的DefaultHttpContent而不是HttpResponse

netty 4.0.23中的DefaultHttpContent而不是HttpResponse,netty,Netty,我有以下Http客户端的管道配置- pipeline.addLast("ssl", new SslHandler()); pipeline.addLast("decoder", new HttpResponseDecoder()); pipeline.addLast("encoder", new HttpRequestEncoder()); pipeline.addLast("handler", new MySimpleChannelInboundHandler());

我有以下Http客户端的管道配置-

pipeline.addLast("ssl", new SslHandler());      
pipeline.addLast("decoder", new HttpResponseDecoder());     
pipeline.addLast("encoder", new HttpRequestEncoder());
pipeline.addLast("handler", new MySimpleChannelInboundHandler());
MySimpleChannelInboundHandler
channelRead0()
方法中,我得到了
DefaultHttpContent
的一个实例,而不是
HttpResponse
。当我使用-

DefaultHttpContent content = (DefaultHttpContent) msg;          
LOG.debug(content.content().toString(CharsetUtil.UTF_8));
我可以看到正在记录的实际HTTP响应

为什么这个HTTP响应没有被解码成
HttpResponse
对象,即使我在管道中有一个HTTP解码器


谢谢

在enc/解码器之前使用
HttpObjectAggregator
,以聚合httpResponse和所有以下HttpContent。在管道中添加
HttpObjectAggregator
后,您将在处理程序中获得
FullHttpResponse
对象

例如:
p.addLast(“聚合器”,新的HttpObjectAggregator(1048576))


还有一件事,如果您没有为客户端实现自己的enc/解码器,您可以使用netty提供的
HttpClientCodec
我遇到了问题。
HttpResponseDecoder
先前对HTTP连接请求的响应进行了解码。我没有覆盖
isContentAlwaysEmpty(HttpMessage HttpMessage)
方法来为连接请求返回false。这使
HttpResponseDecoder
处于不良状态。它希望响应中包含内容,但对HTTP CONNECT的响应中没有内容。当下一个请求的响应到达时,它被作为内容,而不是解码为
HttpResponse


我扩展了
HttpResponseDecoder
并覆盖(覆盖?
isContentAlwaysEmpty(HttpMessage HttpMessage)
,为连接请求返回false,结果成功。这在“解码连接请求的响应”下的
HttpResponseDecoder
中有记录。谢谢您的回复。我知道在
HttpDecoder
之后在我的管道中使用
HttpObjectAggregator
将导致
FullHttpResponse
。但我的问题是,如果没有
HttpObjectAggregator
,我应该得到一个
HttpResponse
、0到n
HttpContent
和一个
LastHttpContent
。但是我只得到一个
DefaultHttpContent
(它有正确的响应)。我尝试在解码器之后添加一个
HttpObjectAggregator
,在聚合器的
channelRead0()
处得到了一个
NullPointerException
。此外,我无法使用
HttpClientCodec
,因为我正在修改使用enc/dec的现有库。