2017-08-01 46 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

你怎么能示范? –