2012-03-08 4 views
18

Как разместить данные JSON с использованием HttpURLConnection? Я пытаюсь это: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" 

ли это способ справиться с Curl запрос? Любая информация будет очень полезной для меня.

Спасибо.

+0

Вы должны разместить сообщение об ошибке – ykaganovich

ответ

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}," описание ":" test2 "}]," mode ":" WALKING "}" ... - это объект, который я отправляю с помощью этого метода, и я получите код ответа HTTP 500. – crowmagnumb

+0

@CrowMagnumb Вы должны отправить отдельный вопрос. 500 означает, что на сервере имеется внутренняя ошибка, пытающаяся обработать ваш запрос. – ykaganovich

+0

ОК, я сделал это [здесь] (http://stackoverflow.com/questions/20452366/http-response-code-500-sending-complex-json-object-using-httpurlconnection) Спасибо за предложение. – crowmagnumb

8

Вы можете использовать класс OutputStreamWriter.

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

Какая польза от 'OutputStream'? – Darpan

Смежные вопросы