为什么使用POST方法的Java HttpURLConnections导致Http 500错误返回?

时间:2011-12-20 13:07:30

标签: java http rest drools httpurlconnection

我正在编写一个使用REST API迁移JBoss Guvnor包的应用程序。基本上它通过REST GET请求读取所有资产,并使用PUT / POST请求将它们写入另一个Guvnor。

以下是我的POST方法的一小部分:

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)错误?

2 个答案:

答案 0 :(得分:1)

您的客户端代码看起来不错。当响应代码不是2xx系列时,标准HttpUrlConnection在尝试读取输入流时总是抛出异常。响应代码500表示服务器端发生意外错误。请参阅服务器日志。你会在那里找到原因。

祝你好运。

答案 1 :(得分:1)

您的代码没有明显错误。 500响应意味着(应该意味着)服务器遇到了内部问题。你的请求有些不寻常的事情可能会触发问题,但也可能是完全不相关的事情。

我建议您执行以下操作:

  • 检查服务器端日志中是否存在与失败请求一致的错误/异常。

  • 打开,读取和记录HttpUrlConnection的错误流。它可能有更多信息性的错误信息。