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

尽管状态码是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不会更改服务器上的任何值。该请求不会显示任何影响。

非常感谢您的帮助和建议! 特里萨

+0

接收应用程序是否已知?它是否会生成任何可以检查的日志? – DaSourcerer

+0

您可以从Postman的java中生成代码并尝试运行该代码。链接:https://www.getpostman.com/docs/code_snippets –

+1

如果字符串包含非ASCII字符,那么您的长度计算将会失败...... –

urlConn.setRequestMethod("PUT"); 

设置请求方法PUT。

urlConn.setDoOutput(true); 

启用输出并将请求方法设置为POST。看到Javadoc。你需要先做,而不是最后。

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