发送HTTP-PUT-Request不起作用,尽管状态代码为200

时间:2017-05-03 13:04:38

标签: java json http http-headers put

我想发送一个包含JSON-Body的Http-PUT-Request,但我不知道如何定义该主体。我已经尝试了很多,但总是遇到同样的问题。顺便说一下,我已经在邮递员中测试了put-request,它应该可以正常工作,但我无法用Java实现这个请求。

我的最新尝试看起来像这样:

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不会更改服务器上的任何值。请求没有显示任何效果。

提前感谢您提供任何帮助或建议! 颖

1 个答案:

答案 0 :(得分:0)

urlConn.setRequestMethod("PUT");

将请求方法设置为PUT。

urlConn.setDoOutput(true);

启用输出并将请求方法设置为POST。见Javadoc。你需要先做,而不是持续。

注意不要设置内容长度。 Java会为你做到这一点。