2017-08-01 1 views
-4

Je veux envoyer { "name": "super-utilisateur", "status": 1} mais quand j'envoie je reçois cette erreurEnvoi d'un entier http requête PUT en 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) 

ici est le code

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

mais quand j'envoie { "name": "super-utilisateur", "status": "1"} la demande est ok, mais l'API a une validation qui exige qu'il soit envoyé comme un entier et le rejette. et je ne peux pas changer l'api.

+0

si votre code fonctionne avec une entrée, mais pas un autre, cela signifie que votre code est correct, le problème est l'API que vous envoyez à – nafas

+0

Votre code ne montre pas où vous créez le lecteur et obtenir le NullPointerException – ControlAltDel

+0

est l'erreur que vous avez montré client ou côté serveur? qu'est-ce que l'API s'attend à être un nombre entier? avez-vous le contrôle du côté serveur? vous devriez améliorer votre question – nandsito

Répondre

0

Vous essayez de créer un lecteur pour la réponse à votre appel d'URL, mais il est probable que le socket a déjà été fermé. Vous devez vérifier vos appels httpConnection.getXXXStream pour vous assurer que la connexion httpConnection est toujours active et que la valeur renvoyée par les appels getStream n'est pas Null.

- modifier -

Votre chèque de responseCode != 200 est un problème. Aucun des codes de réponse dans les années 100 et 200 n'est une erreur et n'utilisera pas le flux d'erreurs. Dans le cas contraire, vous devez vérifier que les InputStreams que vous obtenez de l'HttpConnection, comme

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

comment pourriez-vous démontrer s'il vous plaît? –