2015-05-01 32 views
0

我想发布一个json到一个URL。我发现下面的代码,它工作正常,我:Java中的HTTP发布Json

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(); 
     } 
    } 

但我只希望发布和我不关心的响应。因此,当我尝试删除第二部分(使用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 

刷新此输出流并强制任何缓冲的输出字节是 写出。 flush的一般契约是,调用它是一个 指示,如果先前写入的任何字节已被输出流的实现缓冲,则这些字节应该立即被写入到其预期的目的地。

之前关闭的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

正如你可以看到在第一个代码我didn不需要os.flush()来正常工作。不,这对第二个代码没有帮助。 – njank

+0

@Tapani,感谢您指出这一点! –