2012-03-08 63 views
18

如何使用HttpURLConnection發佈JSON數據?我想這一點:cURL和HttpURLConnection - 發佈JSON數據

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect(); 

StringReader reader = new StringReader("{'value': 7.5}"); 
OutputStream os = httpcon.getOutputStream(); 

char[] buffer = new char[4096]; 
int bytes_read;  
while((bytes_read = reader.read(buffer)) != -1) { 
    os.write(buffer, 0, bytes_read);// I am getting compilation error here 
} 
os.close(); 

我得到的編譯錯誤在第14行

捲曲請求:

curl -H "Accept: application/json" \ 
-H "Content-Type: application/json" \ 
-d "{'value': 7.5}" \ 
"a URL" 

這是處理捲曲請求的方式?任何信息對我都很有幫助。

謝謝。

+0

您應該發佈編譯錯誤 – ykaganovich 2012-03-08 19:08:58

回答

30

OutputStream期望與字節一起使用,並且您將字符傳遞給它。試試這個:

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect(); 

byte[] outputBytes = "{'value': 7.5}".getBytes("UTF-8"); 
OutputStream os = httpcon.getOutputStream(); 
os.write(outputBytes); 

os.close(); 
+0

難道不能以這種方式發送複雜的json對象嗎?例如... 「{」points「:[{」point「:{」latitude「:40.8195085182092,」longitude「: - 73.75127574479318},」​​description「:」test「},{」point「:{緯度「:40.2195085182092,」經度「: - 74.75127574479318},」​​description「:」test2「}],」mode「:」WALKING「}」 ...是通過此方法發送的對象,得到500的HTTP響應代碼。 – crowmagnumb 2013-12-03 04:30:20

+0

@CrowMagnumb你應該發佈一個單獨的問題。 500意味着服務器嘗試處理您的請求時發生內部錯誤。 – ykaganovich 2013-12-03 19:59:27

+0

好吧,我已經這麼做了[這裏](http://stackoverflow.com/questions/20452366/http-response-code-500-sending-complex-json-object-using-httpurlconnection)感謝您的建議。 – crowmagnumb 2013-12-08 10:34:44

8

您可能需要使用OutputStreamWriter類。

final String toWriteOut = "{'value': 7.5}"; 
final OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream()); 
osw.write(toWriteOut); 
osw.close(); 
+0

對'OutputStream'有什麼好處? – Darpan 2015-07-30 07:15:17