2015-05-01 5 views
0

Я хотел бы отправить сообщение json в URL-адрес. Я нашел следующий код, который отлично работает для меня:HTTP-сообщение Json в Java

public void post(URL url, String json) { 
     try { 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setDoOutput(true); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Content-Type", "application/json"); 

      OutputStream os = conn.getOutputStream(); 
      os.write(json.getBytes()); 
      os.close(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(
        (conn.getInputStream()))); 

      String output; 
      System.out.println("Output from Server .... \n"); 
      while ((output = br.readLine()) != null) { 
       System.out.println(output); 
      } 

      conn.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

Но я только хочу, чтобы POST, и я не забочусь об ответе. Так что, когда я пытаюсь снять вторую часть (чтение с BufferedReader) он больше не работает:

public void post(URL url, String json) { 
     try { 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setDoOutput(true); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Content-Type", "application/json"); 

      OutputStream os = conn.getOutputStream(); 
      os.write(json.getBytes()); 
      os.close();  
      conn.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

Может кто-нибудь объяснить, почему?

ответ

0

Try Flushing out the Stream

public void flush() 
      throws IOException 

Приливы этот выходной поток и заставляет любые буферизованные выходные байты, чтобы быть выписали. Общий контракт на флеш состоит в том, что вызов - это указание , что если какие-либо ранее записанные байты были буферизованы , реализация выходного потока, то такие байты должны быть немедленно отправлены в назначенное им место назначения.

Перед закрытием OutputStream, промойте

os.flush(); --> This will flush your stream 
os.close(); 
+1

Я не думаю, что промывка помогает. http://stackoverflow.com/questions/4844535/why-do-you-have-to-call-urlconnectiongetinputstream-to-be-able-to-write-out-to – Tapani

+0

Как вы можете видеть в первом коде, я сделал Не нужно os.flush() работать правильно. И нет, это не помогает во втором коде. – njank

+0

@ Тапани, спасибо, что указал! –