我使用了Netty,而我必須接受和解析HTTP POST請求。據我所知,Netty沒有內置的對POST的支持,只有GET。 (這是一個處理原始網絡操作的相當低級的庫,使用一個開箱即用的servlet容器不是一個選項。)如何解碼Java中的HTTP POST數據?
如果我將POST請求的內容作爲一個字節數組,什麼是解析成參數映射的最快和最無缺陷的方式?
我可以自己寫這個,但有必須是一些內置到JDK中的方法,這使得這更容易。我敢打賭,有一些陷阱和角落案件需要處理。
是否使用的是網狀的版本我使用了Netty,而我必須接受和解析HTTP POST請求。據我所知,Netty沒有內置的對POST的支持,只有GET。 (這是一個處理原始網絡操作的相當低級的庫,使用一個開箱即用的servlet容器不是一個選項。)如何解碼Java中的HTTP POST數據?
如果我將POST請求的內容作爲一個字節數組,什麼是解析成參數映射的最快和最無缺陷的方式?
我可以自己寫這個,但有必須是一些內置到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 Extension」的第三方庫。這就是你在說什麼? – ccleve 2011-12-29 03:08:02
對不起,我指的是目前還沒有的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
下載它,我們如何能夠解碼HTTP使用JSON內容類型PST的要求嗎? – 2013-07-02 13:02:08
? 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
這很有幫助。看起來他們通過字節行進並分割'='和'&'。我可能不得不做類似的事情。 – ccleve 2011-12-28 19:02:14
可以在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));
我們如何使用json content-type解碼http pst請求? – 2013-07-02 13:04:09
獲得從請求體JSON字符串,然後使用像傑克遜(爪哇)或JSON4S(斯卡拉)JSON處理庫等來處理它: '字符串jsonString = request.getContent.toString(org.jboss.netty.util .CharsetUtil.UTF_8);' – 2013-07-03 20:22:13
你可以給你想要做的樣本代碼? – mossplix 2011-12-28 18:39:10