2013-12-23 85 views
9

我必须使用我已经生成的JSON字符串发出http Post请求。 我尝试了不同的两种不同的方法:使用JSON字符串在HTTP中的HTTP POST请求

1.HttpURLConnection 
2.HttpClient 

,但我从他们两个相同的“无用”的结果。 到目前为止我的代码与HttpURLConnection的是:

public static void SaveWorkflow() throws IOException { 
    URL url = null; 
    url = new URL(myURLgoeshere); 
    HttpURLConnection urlConn = null; 
    urlConn = (HttpURLConnection) url.openConnection(); 
    urlConn.setDoInput (true); 
    urlConn.setDoOutput (true); 
    urlConn.setRequestMethod("POST"); 
    urlConn.setRequestProperty("Content-Type", "application/json"); 
    urlConn.connect(); 

    DataOutputStream output = null; 
    DataInputStream input = null; 
    output = new DataOutputStream(urlConn.getOutputStream()); 

       /*Construct the POST data.*/ 
    String content = generatedJSONString; 

    /* Send the request data.*/ 
    output.writeBytes(content); 
    output.flush(); 
    output.close(); 

    /* Get response data.*/ 
    String response = null; 
    input = new DataInputStream (urlConn.getInputStream()); 
    while (null != ((response = input.readLine()))) { 
     System.out.println(response); 
     input.close(); 
    } 
} 

到目前为止我的代码与HttpClient的是:

public static void SaveWorkflow() { 
    try { 

     HttpClient httpClient = new DefaultHttpClient(); 
     HttpPost postRequest = new HttpPost(myUrlgoeshere); 
     StringEntity input = new StringEntity(generatedJSONString); 
     input.setContentType("application/json;charset=UTF-8"); 
     postRequest.setEntity(input); 
     input.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8")); 
     postRequest.setHeader("Accept", "application/json"); 
     postRequest.setEntity(input); 

     HttpResponse response = httpClient.execute(postRequest); 

     BufferedReader br = new BufferedReader(
         new InputStreamReader((response.getEntity().getContent()))); 

     String output; 

     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
     } 

     httpClient.getConnectionManager().shutdown(); 

    } catch (MalformedURLException e) { 

     e.printStackTrace(); 

    } catch (IOException e) { 

     e.printStackTrace(); 

    } 
} 

在哪里产生JsonString是这样的:

{"description":"prova_Process","modelgroup":"","modified":"false"} 

的我得到的回应是:

{"response":false,"message":"Error in saving the model. A JSONObject text must begin with '{' at 1 [character 2 line 1]","ids":[]} 

有什么想法吗?

+0

您是否尝试过只是字符串转换为对象(解析JSON)中间没有HTTP传输步骤? –

+0

尝试使用generatedJSONString.trim() – aquaraga

+0

看起来像要使用RESTful web服务;您可能希望通过应用JAX-RS API来让自己的生活变得非常简单。 – Gimby

回答

8

最后,我设法找到解决我的问题......

public static void SaveWorkFlow() throws IOException 
    { 
     CloseableHttpClient httpClient = HttpClients.createDefault(); 
     HttpPost post = new HttpPost(myURLgoesHERE); 
     List<NameValuePair> params = new ArrayList<>(); 
     params.add(new BasicNameValuePair("task", "savemodel")); 
     params.add(new BasicNameValuePair("code", generatedJSONString)); 
     CloseableHttpResponse response = null; 
     Scanner in = null; 
     try 
     { 
      post.setEntity(new UrlEncodedFormEntity(params)); 
      response = httpClient.execute(post); 
      // System.out.println(response.getStatusLine()); 
      HttpEntity entity = response.getEntity(); 
      in = new Scanner(entity.getContent()); 
      while (in.hasNext()) 
      { 
       System.out.println(in.next()); 

      } 
      EntityUtils.consume(entity); 
     } finally 
     { 
      in.close(); 
      response.close(); 
     } 
    } 
+2

你能列出所需的罐子为这个 –

+1

你去 - >编译组:'org.apache.httpcomponents',名称:'httpclient-android',版本:'4.3.5.1'|但它已被弃用,所以试着找到其他的东西: - \ – XcodeNOOB

0

另一种方式来实现这一如下图所示:

public static void makePostJsonRequest(String jsonString) 
{ 
    HttpClient httpClient = new DefaultHttpClient(); 
    try { 
     HttpPost postRequest = new HttpPost("Ur_URL"); 
     postRequest.setHeader("Content-type", "application/json"); 
     StringEntity entity = new StringEntity(jsonString); 

     postRequest.setEntity(entity); 

     long startTime = System.currentTimeMillis(); 
     HttpResponse response = httpClient.execute(postRequest); 
     long elapsedTime = System.currentTimeMillis() - startTime; 
     //System.out.println("Time taken : "+elapsedTime+"ms"); 

     InputStream is = response.getEntity().getContent(); 
     Reader reader = new InputStreamReader(is); 
     BufferedReader bufferedReader = new BufferedReader(reader); 
     StringBuilder builder = new StringBuilder(); 
     while (true) { 
      try { 
       String line = bufferedReader.readLine(); 
       if (line != null) { 
        builder.append(line); 
       } else { 
        break; 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     //System.out.println(builder.toString()); 
     //System.out.println("****************"); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
}