在我的服务器处理程序中; - channelRead()总是将msg作为HTTPRequest获取,在那里我找不到任何获取POST请求有效负载的地方。
HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(false),request);
在我的服务器管道中,我只有HttpServerCodec和自定义处理程序。
答案 0 :(得分:5)
您的HTTP请求可能会被分块。您应该尝试在编解码器之后向管道添加io.netty.handler.codec.http.HttpObjectAggregator
。它将为您的处理程序提供FullHttpRequest。
ChannelPipeline p = ...;
...
p.addLast("encoder", new HttpResponseEncoder());
p.addLast("decoder", new HttpRequestDecoder());
p.addLast("aggregator", new HttpObjectAggregator(1048576));
...
p.addLast("handler", new MyServerHandler());
或者,您可以选中this example,HttpRequest
和HttpContent
分别处理。
答案 1 :(得分:1)
正如Leo Gomes所说,HTTP请求可能会被分块。所以在你自己的管道处理程序之前添加HttpObjectAggregator。 如果HTTP POST请求体是Simple Json String。您可以在自己的处理程序中解析它,如下所示:
var reportData = (from C in Table1
join LC in Table2 on C.Id equals LC.Id
select new { C.Id, C.User, LC.Phy, LC.Che, LC.Bio, LC.Math }).ToList();
foreach (var item in reportData)
{
lstLc.Add(new Launch() { Username= item.User, Phy = item.Phy, Che = item.Che, Bio = item.Bio, Math = item.Math });
}