2012-05-01 22 views

回答

0

你試過這個嗎?

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

是的,我試過了。問題是身體不以CR/LF結束。我通過使用帶有內容長度的read(char [])方法找到了一個解決方案,並且它大致起作用。我想知道這是不是一種完成這個閱讀工作的方法。 – Joshua

+0

您應該從HTTP標頭獲取編碼,而不是假設它是UTF-8。 – artbristol

1

您可以使用Commons IO的org.apache.commons.io.IOUtils.toString(InputStream, String)在一行中完成此操作。 (它不可能與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

+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 = new StringBuilder(); – Joshua

3

如果您在使用Spring MVC,您可以使用@RequestBody標註上這是一個String類型的方法參數。例如。

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