JavaでHttpURLConnection
を使用してJSONデータでPUTリクエストを作成しようとしています。私のやり方ではうまくいきません。エラーが出ないので、何が問題なのかわかりません。
public static void main(String[] args) {
URL url;
try {
url = new URL("http://fltspc.itu.dk/widget/515318fe17450f312b00153d/");
HttpURLConnection hurl = (HttpURLConnection) url.openConnection();
hurl.setRequestMethod("PUT");
hurl.setDoOutput(true);
hurl.setRequestProperty("Content-Type", "application/json");
hurl.setRequestProperty("Accept", "application/json");
String payload = "{'pos':{'left':45,'top':45}}";
OutputStreamWriter osw = new OutputStreamWriter(hurl.getOutputStream());
osw.write(payload);
osw.flush();
osw.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
そして、これが私が実際にしようとしている要求です:
同じアプリ内のリソースに対してすでにGETリクエストを作成しており、問題なく動作しました。どうすればデバッグできるのか、他の方法でどうやってそれを試すことができるのかについてのすべてのヒントにとても感謝しています。これまでのところ、OutputStream
ではなくOutputStreamWriter
のみを使用してみましたが、どちらも機能しません。
HttpURLConnectionのSun(Oracle)実装は、ストリーミングモードであると指示しない限り、投稿のコンテンツをキャッシュします。次のような応答との対話を開始すると、コンテンツが送信されます。
hurl.getResponseCode();
また、RFC 4627によると、jsonで一重引用符を使用することはできません(ただし、実装によっては気にしないようです)。
したがって、ペイロードを次のように変更します。
String payload = "{\"pos\":{\"left\":45,\"top\":45}}";
この例は私のために働きます
public class HttpPut {
public static void main(String[] args) throws Exception {
Random random = new Random();
URL url = new URL("http://fltspc.itu.dk/widget/515318fe17450f312b00153d/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");
OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream());
osw.write(String.format("{\"pos\":{\"left\":%1$d,\"top\":%2$d}}", random.nextInt(30), random.nextInt(20)));
osw.flush();
osw.close();
System.err.println(connection.getResponseCode());
}
}