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

ccl*_*eve 6 java post http netty

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

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

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

Jes*_*jan 13

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);
  }
}
Run Code Online (Sandbox Code Playgroud)


Ngo*_*Dao 7

您可以在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));
Run Code Online (Sandbox Code Playgroud)

  • 从请求主体获取JSON字符串,然后使用JSON处理库(如Jackson(Java)或JSON4S(Scala)等)来处理它:`String jsonString = request.getContent.toString(org.jboss.netty.util.CharsetUtil. UTF_8);` (2认同)