如何解码Java中的http POST数据?

我正在使用Netty,我必须接受并解析http POST请求。 据我所知,Netty没有内置的POST支持,只有GET。 (这是一个处理原始网络操作的相当低级的库。使用servlet容器,它可以完成所有这些开箱即用的操作。)

如果我将POST请求的内容作为字节数组,那么将它解析为参数Map的最快且最无错误的方法是什么?

我自己可以写这个,但是JDK中必须有一些方法可以使这更容易。 而且我敢打赌,还有一些问题需要处理。

Netty有一个高级POST请求解码器(HttpPostRequestDecoder),它可以解码Http属性,FileUpload内容和分块编码。

这是一个简单的表单解码示例

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { HttpRequest request = (HttpRequest) e.getMessage(); HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(false), request); InterfaceHttpData data = decoder.getBodyHttpData("fromField1"); if (data.getHttpDataType() == HttpDataType.Attribute) { Attribute attribute = (Attribute) data; String value = attribute.getValue() System.out.println("fromField1 :" + value); } } 

您可以在Netty 4.x中使用HttpPostRequestDecoder。 它支持各种POST机身。 Netty 4.x目前被标记为alpha,但非常稳定。 请参阅Xitrum中的BodyParser。

如果你只需要解析简单的主体,你仍然可以在Netty 3.x中使用QueryStringDecoder ,将POST主体视为“?”之后的部分。 在URL中,像这样:

 QueryStringDecoder decoder = new QueryStringDecoder("?" + request.getContent.toString(org.jboss.netty.util.CharsetUtil.UTF_8)); 

您使用的是哪个版本的netty? Netty的HttpRequest支持POST方法。 不知道任何可以解析字节以映射params的库。 这通常是servlet容器的作用。 看看tomcat的源代码,了解他们如何实现processParameters()方法http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http /Parameters.java