2012-05-01 14 views
3

HttpExchangeオブジェクトのgetRequestBodyメソッドは、InputStreamを返します。 "Body"を正しく読み込むためにはまだまだ多くの作業があります。これはJavaライブラリ+オブジェクト+メソッドで、もう一歩前進し、本体(サーバー側)をすぐに使えるJava Stringとして返しますか?HTTP POST要求本体をサーバー側でJava Stringとして取得する方法はありますか。

ありがとうございます!

答えて

0

これを試しましたか?

InputStreamReader isr = new InputStreamReader(exchange.getRequestBody(),"utf-8"); 
BufferedReader br = new BufferedReader(isr); 
String value = br.readLine(); 
+0

はい、試しました。問題は、ボディがCR/LFで終わらないということです。私はcontent-lengthでread(char [])メソッドを使って解決策を見つけました。この読書仕事を最後まで行う方法ではないかと思います。 – Joshua

+0

UTF-8であると仮定するのではなく、HTTPヘッダーからエンコーディングを取得する必要があります。 – artbristol

1

Commons IOのorg.apache.commons.io.IOUtils.toString(InputStream, String)を使用すると、これを1行で実行できます。 (それはしかしキープアライブHTTPで動作しない場合があります)

編集:

あなたはJSONに直行したい場合は、あなたのための非整列化を行いますWebサービス・スタックの束があります。 http://www.cribbstechnologies.com/2011/04/08/spring-mvc-ajax-web-services-part-2-attack-of-the-json-post/

CXF/JAX-RS:

春を試してみて、あなたが春のMVCを使用している場合http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-JSONsupport

+0

これはJsonです。私はそれを解読し、MySQLデータベースにデータを挿入します。 – Joshua

+0

これはJsonに直接行く方法ですか?それは素晴らしいことだ! – Joshua

3
InputStreamReader isr = new InputStreamReader(t.getRequestBody(),"utf-8"); 
BufferedReader br = new BufferedReader(isr); 

// From now on, the right way of moving from bytes to utf-8 characters: 

int b; 
StringBuilder buf = new StringBuilder(512); 
while ((b = br.read()) != -1) { 
    buf.append((char) b); 
} 

br.close(); 
isr.close(); 

// The resulting string is: buf.toString() 
// and the number of BYTES (not utf-8 characters) from the body is: buf.length() 
+0

StringBuilder buf =新しいStringBuilder(); – Joshua

3

、あなたはString型であるメソッドのパラメータに@RequestBodyアノテーションを使用することができます。例えば。

@RequestMapping(value = "/something", method = RequestMethod.POST) 
public void doSomething(@RequestBody String requestBodyString) { 
    // does something.. 
}