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

如何在Java中解码http POST数据?,java,http,post,netty,Java,Http,Post,Netty,我使用的是Netty,我必须接受并解析http POST请求。据我所知,Netty没有内置的对帖子的支持,只是得到了。(这是一个处理原始网络操作的相当低级的库。使用servlet容器来完成所有这些操作是不可取的。) 如果我将POST请求的内容作为字节数组,那么将其解析为参数映射的最快、最无bug的方法是什么 我可以自己写,但JDK中必须内置一些方法,使之更容易。我敢打赌一定有一些棘手的问题需要解决。你使用的是哪种版本的netty?Netty的HttpRequest支持POST方法。 不知道有任何

我使用的是Netty,我必须接受并解析http POST请求。据我所知,Netty没有内置的对帖子的支持,只是得到了。(这是一个处理原始网络操作的相当低级的库。使用servlet容器来完成所有这些操作是不可取的。)

如果我将POST请求的内容作为字节数组,那么将其解析为参数映射的最快、最无bug的方法是什么


我可以自己写,但JDK中必须内置一些方法,使之更容易。我敢打赌一定有一些棘手的问题需要解决。

你使用的是哪种版本的netty?Netty的HttpRequest支持POST方法。
不知道有任何库可以将字节解析为参数的映射。这通常是servlet容器所做的。看看tomcat如何实现processParameters()方法的源代码,Netty有一个高级请求后解码器(HttpPostRequestDecoder),可以解码 Http属性,使用分块编码的文件上载内容

下面是一个简单的表单解码示例

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。它支持各种柱体。Netty 4.x目前标记为alpha,但非常稳定。见希特勒姆

如果您只需要解析简单的正文,您仍然可以在Netty 3.x中使用,方法是将帖子正文处理为URL中“?”之后的部分,如下所示:

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

你能给出你想做什么的示例代码吗?这很有帮助。看起来它们在字节间行进并在“=”和“&”上拆分。我可能也要做类似的事情,你确定吗?我在谷歌上搜索了这个类,发现只有一个名为“Netty Extension”的第三方库拥有它。这就是你所说的吗?对不起,我指的是Netty 4.0.X,它还没有上市。正如您所说,HttpPostRequestDecoder来自Netty扩展库,它现在与Netty 4.0.X合并。您可以从这里下载如何在Netty中使用Get方法发送查询参数?从请求体获取JSON字符串,然后使用JSON处理库(如Jackson(Java)或JSON4S(Scala)等)对其进行处理:
string jsonString=request.getContent.toString(org.jboss.Netty.util.CharsetUtil.utf8)