2011-12-28 8 views
6

私はNettyを使用しています.HTTP POSTリクエストを受け入れて解析する必要があります。私が知る限り、NettyにはGETだけが組み込まれたPOSTのサポートはありません。 (これは、基本的なネットワーク操作を処理するかなり低レベルのライブラリです。サーブレットコンテナを使用すると、このオプションはすべて実行されません)。Javaでhttp POSTデータをデコードする方法は?

POSTリクエストの内容をバイト配列、パラメータのマップに解析する最も高速でバグのない方法は何ですか?

これは自分で書くことができますが、にする必要があります。そして、私はいくつかの落とし穴やコーナーケースがあると確信しています。

+0

あなたは何をしようとしているのですか? – mossplix

答えて

13

ネッティーが のHttp属性、チャンクエンコーディングでのFileUploadコンテンツをデコードすることができ、高度なPOSTリクエストデコーダ(HttpPostRequestDecoder)を持つが実装されている方法については、Tomcatのソースを見てみましょう。ここで

はあなたがネッティー4.xではHttpPostRequestDecoder使用できる簡単なフォームデコード例

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

+0

申し訳ありませんがNetty 4.0.Xはまだ利用できません。あなたが言ったように、HttpPostRequestDecoderはNetty 4.0.XとマージされたNetty Extensionライブラリから取得しました。 http://sourceforge.net/projects/goldengate/files/NettyExtension/1.1.9/ –

+0

json content-typeでhttp pstリクエストをデコードするにはどうすればいいですか? –

2

使用しているNettyのバージョンはどれですか? NettyのHttpRequestはPOSTメソッドをサポートしています。 バイトを解析してparamsをマップするライブラリがないことに気付いていません。これは、通常、サーブレットコンテナが行うものです。彼らはprocessParameters()メソッドhttp://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java

+0

これは参考になります。彼らはバイトを進めて、 '='と '&'を分割しているように見えます。私は似たようなことをしなければならないかもしれない。 – ccleve

6

ですあらゆる種類のPOST本体をサポートしています。 Netty 4.xは現時点ではアルファとしてマークされていますが、非常に安定しています。 XitrumのBodyParserを参照してください。

シンプルボディのみを解析する必要がある場合は、「?」の後ろの部分のようにPOSTボディを処理することで、NetBlaster 3.xでもQueryStringDecoderを使用できます。 URLのように:

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

json content-typeでhttp pst要求をデコードするにはどうすればよいですか? –

+1

リクエスト本体からJSON文字列を取得し、Jackson(Java)やJSON4S(Scala)などのJSON処理ライブラリを使用して処理します。 'String jsonString = request.getContent.toString(org.jboss.netty.util .CharsetUtil.UTF_8); ' –

関連する問題