发送的HTTP PUT请求中的一个整数的Java
问题描述:
我想送{“名”:“超级用户”,“状态”: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。
答
您正在尝试为您的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
你怎么能示范? –
如果你的代码与一个输入而不是另一个,这意味着你的代码是好的,问题是你要发送到 – nafas
的API您的代码没有演示您在创建Reader的位置,并且获取NullPointerException – ControlAltDel
是您显示的客户端还是服务器端的错误? api期望是一个整数?你有控制服务器端吗?你应该改善你的问题 – nandsito