在java中的http PUT请求中发送一个整数
Posted
技术标签:
【中文标题】在java中的http PUT请求中发送一个整数【英文标题】:Sending an integer in http PUT request in java 【发布时间】:2017-08-01 15:22:43 【问题描述】:我想发送 "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请求的完整代码 【参考方案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();
【讨论】:
请你怎么演示?以上是关于在java中的http PUT请求中发送一个整数的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?