5

HttpExchange オブジェクトの getRequestBody メソッドは、InputStream を返します。「ボディ」を正しく読み取るには、まだ多くの作業が必要です。もう一歩進んで、(サーバー側で) 本体をすぐに使用できる Java String として返す Java ライブラリ + オブジェクト + メソッドですか?

4

5 に答える 5

6
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()
于 2012-06-06T07:36:22.900 に答える
3

Spring MVC を使用している場合は、String 型のメソッド パラメーターで @RequestBody アノテーションを使用できます。例えば。

@RequestMapping(value = "/something", method = RequestMethod.POST)
public void doSomething(@RequestBody String requestBodyString) {
    // does something..
}
于 2014-12-29T16:35:01.397 に答える
1

これを試しましたか?

 InputStreamReader isr =  new InputStreamReader(exchange.getRequestBody(),"utf-8");
 BufferedReader br = new BufferedReader(isr);
 String value = br.readLine();
于 2012-05-01T05:32:19.677 に答える
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: http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-JSONsupport

于 2012-05-01T07:55:29.650 に答える