2

Web サービスをテストするテスト プログラムを作成しようとしています。GET メソッドを使用して JSON オブジェクトを Web サービスに送信していますが、機能していません。テスト URL は次のようになります。

http://testserver:8080/mydir/{"filename":"test.jpg", "Path":"test/2/2"}

パスの「/」を削除するとプログラムが正常に動作するため、問題が発生していると思います。

RESTごとに、URIのパスパラメータとして「/」を含む値を渡す方法は? 、 java.net.URLEncoder.encode を使用しようとしましたが、役に立ちません。これが私のテストプログラムのスニペットです:

// some code from main method
<snip snip>
String url = "http://testserver:8080/mydir/";
String JSON = "{\"filename\":\"test.jpg\",\"Path\":\"test/2/2\"}";
String enc_JSON = URLEncoder.encode(JSON,"UTF-8");
String testGet = url + enc_JSON;
String out2 = TestCode.httpGet(testGet);
<snip snip>

// code from httpGet method
public static String httpGet(String serverURL) {
  URL url;
  HttpURLConnection conn;

  try {
      url = new URL (serverURL);
      conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
      conn.setUseCaches(false);
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.connect();
// failing at line below
      InputStream input = conn.getInputStream();
<snip snip>

私のプログラムの結果は、HTTP 応答コード 400 を取得することです。httpGet() メソッドのコードに何かを追加するのを忘れたために失敗したのでしょうか、それとも、JSON オブジェクトがパスの場所の最後に「/」を付けますか?

よろしくお願いします。

4

1 に答える 1

4

REST API の場合、通常、JSON オブジェクトは送信 (POST) されるか、要求の本文で返されます。通常、これらは URL の一部としてエンコードされません。

GET 要求の場合、URL のセグメントとして、またはクエリ文字列パラメーターとして情報を渡すことができます。

URL のセグメントとして:

/resourcetype/{path}/{filename}
http://testserver:8080/resourcetype/test/2/2/test.jpg

クエリ文字列パラメーターとして:

/resourcetype?path={path}&file={filename}
http://testserver:8080/resourcetype?path=test/2/2&filename=test.jpg
于 2012-12-19T02:05:42.487 に答える