我需要使用Netty创建一个服务器应用程序,该应用程序将同时接收“ GETs”或“ POSTs”之类的请求。在GET请求的情况下,参数将作为查询参数。

我一直在检查HttpRequestDecoder是否适合GET请求,而HttpPostRequestDecoder是否适合该帖子。但是我如何同时处理这两个问题?

对Netty不太熟悉,所以我需要一点帮助:)

最佳答案

netty规定我们将请求作为管道处理,在此您将管道定义为处理程序序列。

一个序列可能是这样的:

p.addLast ("codec", new HttpServerCodec ());
p.addLast ("handler", new YourHandler());


其中p是ChannelPipeline接口的实例。您可以如下定义YourHandler类:

public class YourHandler extends ChannelInboundHandlerAdapter
{
    @Override
    public void channelRead (ChannelHandlerContext channelHandlerCtxt, Object msg)
        throws Exception
    {
        // Handle requests as switch cases. GET, POST,...
        // This post helps you to understanding switch case usage on strings:
        // http://stackoverflow.com/questions/338206/switch-statement-with-strings-in-java
        if (msg instanceof FullHttpRequest)
        {
            FullHttpRequest fullHttpRequest = (FullHttpRequest) msg;
            switch (fullHttpRequest.getMethod ().toString ())
            {
                case "GET":
                case "POST":
                ...
            }
        }
    }
}

10-04 11:11