2011-12-28 54 views
6

我使用了Netty,而我必須接受和解析HTTP POST請求。據我所知,Netty沒有內置的對POST的支持,只有GET。 (這是一個處理原始網絡操作的相當低級的庫,使用一個開箱即用的servlet容器不是一個選項。)如何解碼Java中的HTTP POST數據?

如果我將POST請求的內容作爲一個字節數組,什麼是解析成參數映射的最快和最無缺陷的方式?

我可以自己寫這個,但有必須是一些內置到JDK中的方法,這使得這更容易。我敢打賭,有一些陷阱和角落案件需要處理。

是否使用的是網狀的版本
+0

你可以給你想要做的樣本代碼? – mossplix 2011-12-28 18:39:10

回答

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); 
    } 
} 
+0

你確定嗎?我搜索了這個類,並且只找到了一個名爲「Netty Extension」的第三方庫。這就是你在說什麼? – ccleve 2011-12-29 03:08:02

+0

對不起,我指的是目前還沒有的Netty 4.0.X。正如你所說的,來自Netty Extension庫的HttpPostRequestDecoder現在已經與Netty 4.0.X合併了。你可以從這裏http://sourceforge.net/projects/goldengate/files/NettyExtension/1.1.9/ – 2011-12-29 06:21:10

+0

下載它,我們如何能夠解碼HTTP使用JSON內容類型PST的要求嗎? – 2013-07-02 13:02:08

6

可以在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)); 
+0

我們如何使用json content-type解碼http pst請求? – 2013-07-02 13:04:09

+1

獲得從請求體JSON字符串,然後使用像傑克遜(爪哇)或JSON4S(斯卡拉)JSON處理庫等來處理它: '字符串jsonString = request.getContent.toString(org.jboss.netty.util .CharsetUtil.UTF_8);' – 2013-07-03 20:22:13