【发布时间】:2017-05-15 16:16:16
【问题描述】:
以下代码在 Spring 中向 REST API 发出 HTTP POST:
...
HttpURLConnection connection = null;
InputStream input = null;
BufferedWriter output = null;
BufferedReader reader = null;
String result = null;
try {
connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
//Send data
output = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
output.write(data);
output.flush();
//Read response
int responseCode = connection.getResponseCode();
if (responseCode >= 400) {
input = connection.getErrorStream();
} else {
input = connection.getInputStream();
}
reader = new BufferedReader(new InputStreamReader(input));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
result = "Status " + responseCode + ".\n" + sb.toString();
...
其中 url 包含 REST API 端点,data 是一个 JSON 转换为字符串,带有 POST 中所需的用户属性。
问题是,虽然 POST 按预期工作,但在我获得 HTTP 状态 201 后,我无法获得 API 返回的响应正文(但它在出现错误的情况下有效,例如 HTTP 状态 409)。奇怪的是,readline() 函数在第一次读取时总是返回 null。该 API 可以完美地从 Postman 调用它,甚至可以从 Eclipse 中的 Java 项目运行该代码。
我的 compileSdkversion 和 targetSdkVersion 设置为 25。
我将我的代码与网上的大量HttpURLConnection 示例进行了比较,到处应用更改,但没有成功...
有什么想法吗?
【问题讨论】:
标签: java android spring rest httpurlconnection