2014-10-16 35 views
0

这是我的第一篇文章。简而言之,我设置了一个MongoDB实例,并安装了一个REST服务来在其上运行命令。我选择的是SleepyMongoose。使用Java与SleepyMongoose来执行MongoDB插入

我一直在试图写一个简单的Java程序来做三件事:一个查找,一个插入和另一个查找。基本上,显示集合,插入一些内容,并再次显示以显示更新。发现工作正常,但插入一直给我带来麻烦。

The documentation of SleepyMongoose使用curl与数据参数,但我一直在使用Java的HttpURLConnection。我如何将该数据参数添加到HttpURLConnection?这是我一直在尝试:

private static void POST (String command) { 

try { 
     // The 'command' is just going to be 'insert' for now. 
     URL restURL = new URL(REST + DATABASE + "/" + COLLECTION + "/_" + command); 
     HttpURLConnection conn = (HttpURLConnection) restURL.openConnection(); 
     conn.setRequestMethod("POST"); 
     conn.setDoOutput(true); 
     conn.connect(); 

     OutputStream out = conn.getOutputStream(); 
     String x = "docs=[{'x':1}]"; 
     out.write(x.getBytes()); 
     out.close(); 

     conn.disconnect(); 
    } 

catch (Exception e) { 
     System.out.println("Uh oh..."); 
     e.printStackTrace(); 
    } 
} 

我甚至使用SleepyMongoose的正确目的?有更好的选择吗?我没有被绑定到任何REST API,但我想要插入。

谢谢大家

回答

0

出于某种原因,它只是如果有连接到它的读者,也适用。如果我在写入后立即附加以下内容,它可以很好地工作:

String line, output = ""; 

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
while ((line = rd.readLine()) != null) 
    output += line; 

rd.close(); 

有人可以解释这一点吗?

0

我碰巧正在为Android项目编写类似的代码,并且在执行POST时已经成功完成了下面的代码。

请注意,您获取的数据在进行HttpResponse时需要进行解析。我一直把它转换成一个字符串,然后拉出JSON值(见下文)。

样品插入:

String[] link2 = {"http://XXX.XXX.XXX.XXX:27080/foo/bar/_insert", "[{\"x\":2},{\"x\":3}]"}; 
new HTTPPost().execute(link2); 

代码POST,你的将是不同的,由于没有为Android编写专。用HttpClient替换AndroidHttpClient。请注意用于指定“文档”作为关键字的BasicNameValuePair。

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

protected HttpResponse doInBackground(String... params) { 
     String link = params[0]; 
     String value = params[1]; 
     HttpPost post = new HttpPost(link); 
     AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("docs", value)); 
      post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      return client.execute(post); 

     } catch (IOException e) { 
      return null; 
     } finally { 
      client.close(); 
     } 
    } 

为了解析字符串:

String test = EntityUtils.toString(result.getEntity()); 

拉出JSON值:

public String parseJSON(String toParse) 
{ 
    try { 
     JSONObject jObject = new JSONObject(toParse); 
     String aJsonString = jObject.getString("ok"); 

     JSONArray jArray = jObject.getJSONArray("results"); 

     for (int i = 0; i < jArray.length(); i++) { 
      try { 
       JSONObject oneObject = jArray.getJSONObject(i); 
       // Pulling items from the array 
       String oneObjectsItem = oneObject.getString("link"); 
       return oneObjectsItem; 
      } catch (JSONException e) { 
       // Oops 
      } 
     } 
    } catch (Exception ex) { 
    } 
    return ""; 
}