HttpExchangeオブジェクトのgetRequestBodyメソッドは、InputStreamを返します。 "Body"を正しく読み込むためにはまだまだ多くの作業があります。これはJavaライブラリ+オブジェクト+メソッドで、もう一歩前進し、本体(サーバー側)をすぐに使えるJava Stringとして返しますか?HTTP POST要求本体をサーバー側でJava Stringとして取得する方法はありますか。
ありがとうございます!
HttpExchangeオブジェクトのgetRequestBodyメソッドは、InputStreamを返します。 "Body"を正しく読み込むためにはまだまだ多くの作業があります。これはJavaライブラリ+オブジェクト+メソッドで、もう一歩前進し、本体(サーバー側)をすぐに使えるJava Stringとして返しますか?HTTP POST要求本体をサーバー側でJava Stringとして取得する方法はありますか。
ありがとうございます!
これを試しましたか?
InputStreamReader isr = new InputStreamReader(exchange.getRequestBody(),"utf-8");
BufferedReader br = new BufferedReader(isr);
String value = br.readLine();
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
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()
StringBuilder buf =新しいStringBuilder(); – Joshua
、あなたはString型であるメソッドのパラメータに@RequestBodyアノテーションを使用することができます。例えば。
@RequestMapping(value = "/something", method = RequestMethod.POST)
public void doSomething(@RequestBody String requestBodyString) {
// does something..
}
はい、試しました。問題は、ボディがCR/LFで終わらないということです。私はcontent-lengthでread(char [])メソッドを使って解決策を見つけました。この読書仕事を最後まで行う方法ではないかと思います。 – Joshua
UTF-8であると仮定するのではなく、HTTPヘッダーからエンコーディングを取得する必要があります。 – artbristol