2017-08-01 90 views
-4

我想送{「名」:「超級用戶」,「狀態」:1}但是當我送我得到這個錯誤發送的HTTP PUT請求中的一個整數的Java

Exception in thread "main" java.lang.NullPointerException 
    at java.io.Reader.<init>(Reader.java:78) 
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72) 
    at com.service.RoleService.updateRole(RoleService.java:145) 
    at com.service.RoleService.main(RoleService.java:176) 

這裏是代碼

URL url = new URL("http://localhost:31109/user/role/"+role_id); 
     HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); 
     httpConnection.setDoOutput(true); 
     httpConnection.setRequestMethod("PUT"); 
     httpConnection.setRequestProperty("Content-Type", "application/json"); 
     httpConnection.setConnectTimeout(15000); 

     String input = "{\"name\":\""+name+"\",\"status\":"+status+"}"; 
     System.out.println(input); 


     OutputStream outputStream = httpConnection.getOutputStream(); 

     outputStream.write(input.getBytes()); 

     outputStream.flush(); 

     if(httpConnection.getResponseCode() !=200){ 
      String error_resp; 
      BufferedReader error_responseBuffer = new BufferedReader(new InputStreamReader(
       (httpConnection.getErrorStream()))); 
      while((error_resp = error_responseBuffer.readLine()) != null){ 
       System.out.println("Error responsecode => "+httpConnection.getResponseCode()+"error => "+error_resp); 
       output = new JSONObject(error_resp); 
      } 
     }else { 
      BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
        (httpConnection.getInputStream()))); 
      String httpresponse; 
      StringBuilder content = new StringBuilder(); 
      while((httpresponse = responseBuffer.readLine()) != null){ 
       content.append(httpresponse); 
      } 
      output = new JSONObject(content.toString()); 
     } 
     httpConnection.disconnect(); 

然而,當我送{「名」:「超級用戶」,「狀態」:「1」}請求是確定,但API有需要它發送一個驗證作爲一個整數並拒絕它。我不能改變API。

+0

如果你的代碼與一個輸入而不是另一個,這意味着你的代碼是好的,問題是你要發送到 – nafas

+0

的API您的代碼沒有演示您在創建Reader的位置,並且獲取NullPointerException – ControlAltDel

+0

是您顯示的客戶端還是服務器端的錯誤? api期望是一個整數?你有控制服務器端嗎?你應該改善你的問題 – nandsito

回答

0

您正在嘗試爲您的URL調用的響應創建Reader,但可能套接字已關閉。您應該檢查您的httpConnection.getXXXStream調用,以確保httpConnection仍然存在,並且getStream調用的返回值不爲null。

- 編輯 -

您的responseCode != 200檢查是一個問題。 100和200中的響應代碼都不是錯誤,並且不會使用錯誤流。否則,你應該檢查你是從HttpConnection的獲取inputstreams,像

if(httpConnection.getResponseCode() !=200){ 
     String error_resp; 
     InputStream in = httpConnection.getErrorStream(); 
     if (in == null) return; // check if the error stream is null 
     BufferedReader error_responseBuffer = new BufferedReader(new InputStreamReader(
      (httpConnection.getErrorStream()))); 
     while((error_resp = error_responseBuffer.readLine()) != null){ 
      System.out.println("Error responsecode => "+httpConnection.getResponseCode()+"error => "+error_resp); 
      output = new JSONObject(error_resp); 
     } 
    }else { 
     InputStream in = httpConnection.getInputStream(); 
     if (in == null) return; // check inputstream 
     BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
       (in))); 
     String httpresponse; 
     StringBuilder content = new StringBuilder(); 
     while((httpresponse = responseBuffer.readLine()) != null){ 
      content.append(httpresponse); 
     } 
     output = new JSONObject(content.toString()); 
    } 
    httpConnection.disconnect(); 
+0

你怎麼能示範? –