2012-03-08 4 views
18

HttpURLConnection을 사용하여 JSON 데이터를 게시하는 방법은 무엇입니까? 내가 라인에서 14cURL 및 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(); 

:

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

이 컬 요청을 처리 할 수있는 방법이 있나요 나는이 노력하고 있어요? 모든 정보는 나에게 매우 도움이 될 것입니다.

감사합니다.

+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 ": {"위도 ": 40.8195085182092"경도 ": 73.75127574479318},"description ":"test "}, {"point " 위도 ": 40.2195085182092,"경도 ": - 74.75127574479318},"설명 ":"test2 "}],"모드 ":"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