为什么使用POST方法的Java HttpURLConnections会导致Http 500错误返回?
我正在编写一个应用程序,它将使用其REST API来迁移JBoss Guvnor软件包。基本上它通过REST GET请求读取所有资产,并使用PUT/POST请求将它们写入另一个Guvnor。为什么使用POST方法的Java HttpURLConnections会导致Http 500错误返回?
这里是我的方法的一个小片段,的确文章:每次
HttpURLConnection conn = (HttpURLConnection) path.getURL()
.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-type", path.getType().getAcceptMIME());
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Authorization", "Basic " + authString);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
conn.getOutputStream()));
bw.write(content);
bw.flush();
conn.connect();
它的工作原理,所有的资产被迁移,但conn.getResponseCode()
回报500 conn.getResponseMessage()
返回内部服务器错误。
我对使用java处理HTTP请求相当陌生,我不知道是否会发生这种情况,为什么会发生这种情况,以及它是由于我的代码段中的某个错误还是服务器端(Guvnors )错误?
你的代码没有任何明显的错误。 500响应意味着(应该表示)服务器遇到内部问题。有关您的请求的异常情况可能会引发问题,但也可能是完全不相关的。
我建议你做到以下几点:错误/与失效的要求相一致的例外
检查服务器端的日志。
打开,读取并记录HttpUrlConnection的错误流。它可能有更多的信息错误信息。
你是对的。在检查服务器端日志后,事实证明,Guvnor在发布资产后抛出异常(由于分类名称分配给此Guvnor中不存在的资产)。 谢谢。 – r3mbol 2011-12-20 13:38:55
您的客户端代码看起来不错。当响应代码不是2xx系列时,标准HttpUrlConnection在尝试从输入流读取时总是抛出异常。响应代码500意味着服务器端发生意外错误。请参阅服务器日志。你会在那里找到原因。
祝你好运。
是的,服务器日志显示问题:) – r3mbol 2011-12-20 13:39:41
我觉得在你已经调用'conn.getOutputStream()'后,你不需要调用'conn.connect()'。何时何地测试响应代码和响应消息?我在你的问题中看不到一个例子。 – 2011-12-20 13:13:25
响应代码/消息后被调用,但这并不重要,即使没有这些,并与wireshark听我看到HTTP 500 – r3mbol 2011-12-20 13:21:13