【问题标题】:Sending an integer in http PUT request in java在java中的http PUT请求中发送一个整数
【发布时间】:2023-03-15 10:14:01
【问题描述】:

我想发送 {"name":"super user","status":1} 但发送时出现此错误

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

但是,当我发送 {"name":"super user","status":"1"} 请求是正常的,但 API 有一个验证,要求它作为整数并拒绝它。而且我无法更改 api。

【问题讨论】:

  • 如果您的代码使用一个输入但不能使用另一个输入,这意味着您的代码没问题,问题在于您发送到的 API
  • 您的代码没有说明您在哪里创建阅读器并获取 NullPointerException
  • 您显示的错误是客户端还是服务器端? api 期望是什么整数?您可以控制服务器端吗?你应该改进你的问题
  • @nandsito api 需要 {"name":"super user","status":1} 但是当它尝试使用上面的代码发送它时它会中断。有一个空指针异常。但是当我用 {"name":"super user","status":"1"} 调用它时,代码不会破坏它,只是 api 在其验证中拒绝它
  • @ControlAltDel 我已经编辑了调用http请求的完整代码

标签: java json http httpclient


【解决方案1】:

您正在尝试为您的 URL 调用的响应创建一个阅读器,但可能已经关闭了套接字。您应该检查您的 httpConnection.getXXXStream 调用以确保 httpConnection 仍然存在并且 getStream 调用的返回值不为空。

-- 编辑--

您对responseCode != 200 的检查有问题。 100s 和 200s 中的响应码都不是错误,不会使用错误流。否则,您应该检查您从 httpConnection 获得的输入流,例如

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

【讨论】:

  • 请你怎么演示?
猜你喜欢
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2010-11-06
  • 2022-12-25
  • 2011-03-20
相关资源
最近更新 更多