2012-03-08 64 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