尽管状态码是200,但发送HTTP-PUT-Request不起作用
问题描述:
我想发送一个包含JSON-Body的Http-PUT-Request,但我不知道如何定义该主体。我已经通过了解了很多,但总是遇到同样的问题。顺便说一下,我已经在postman中测试了put-request,并且它按照它的方式工作,但是我不能在Java中实现这个请求。尽管状态码是200,但发送HTTP-PUT-Request不起作用
我最新的尝试是这样的:
String sURL = "http://localhost/Thingworx/Things/testAC/Properties/*";
HttpURLConnection urlConn;
URL mUrl = new URL(sURL);
urlConn = (HttpURLConnection) mUrl.openConnection();
//query should be the body
String query = String.format("{\"datDate\":%s,\"txtFrom\": %s,\"txtTo\": %s,\"numFlightTimeDecimal\":%f,\"numSeatCapacity\":%d,\"numLoad\":%d,\"numDirt\":%f,\"numTotalFlightTime\":%f,\"numCummulatedDirt\":%f}", javaDate.toString(), txtFrom, txtTo, numFlightTimeDecimal, numSeatCapacity, numLoad, numDirt, numTotalFlightTime, numCumDirt);
urlConn.setRequestMethod("PUT");
urlConn.setRequestProperty("appKey", "1042fdd2-8e85-4de1-9c92-d79ac24c1ffc");
urlConn.addRequestProperty("Content-Type", "application/json");
urlConn.setDoOutput(true);
if (query != null) {
urlConn.setRequestProperty("Content-Length", Integer.toString(query.length()));
urlConn.getOutputStream().write(query.getBytes("UTF8"));
}
System.err.println(urlConn.getResponseCode());
响应码200表示,这应该是罚款即可。但PUT-Request不会更改服务器上的任何值。该请求不会显示任何影响。
非常感谢您的帮助和建议! 特里萨
答
urlConn.setRequestMethod("PUT");
设置请求方法PUT。
urlConn.setDoOutput(true);
启用输出并将请求方法设置为POST。看到Javadoc。你需要先做,而不是最后。
注意不要设置内容长度。 Java会为你做到这一点。
接收应用程序是否已知?它是否会生成任何可以检查的日志? – DaSourcerer
您可以从Postman的java中生成代码并尝试运行该代码。链接:https://www.getpostman.com/docs/code_snippets –
如果字符串包含非ASCII字符,那么您的长度计算将会失败...... –