如何在查询中发送带“/”的GET请求

时间:2012-12-19 01:54:51

标签: java web-services rest get

我正在尝试编写一个测试程序来测试我的Web服务。我正在通过GET方法将JSON对象发送到我的Web服务,但它无法正常工作。我的测试网址如下所示:

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

我认为路径中的“/”会导致我出现问题,因为删除它们后程序运行正常。

Per REST how to pass values containing "/" as path parameter in the 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()方法中添加一些导致它失败的东西,或者我在URL中做了一些非法的东西,因为最后添加了JSON对象,路径位置是“/”吗?

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

对于REST API,JSON对象通常是在请求正文中发送(POST)或返回的。它们通常不会被编码为URL的一部分。

对于GET请求,您可以将信息作为url中的段传递,也可以作为querystring参数传递。

作为网址中的细分:

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

作为querystring params:

/resourcetype?path={path}&file={filename}
http://testserver:8080/resourcetype?path=test/2/2&filename=test.jpg