2016-10-18 58 views
0

我想下面的JSON字符串發送到URL中的Java:發送JSON到Java帖子,和顯示信息

其中標記名稱是data和身體

{"process": "mobileS","phone": "9999999999"} 

的代碼,我至今如下:

HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead 

try { 
    HttpPost request = new HttpPost("url goes here"); 
    StringEntity params = new StringEntity("details={\"process\":\"mobileS\",\"phone\":\"9999999999\"}"); 
    request.addHeader("content-type", "application/x-www-form-urlencoded"); 
    request.setEntity(params); 

    HttpResponse response = httpClient.execute(request); 
    System.out.println(response); 

    // handle response here... 
} catch (Exception ex) { 
    // handle exception here 
} finally { 
    httpClient.getConnectionManager().shutdown(); //Deprecated 
} 

我應該是JSON數據發送到服務器後,得到上述JSON字符串,但我不知道,其中,發送後去以上要求。

的好處是,響應還給200響應,它顯示了所有其他的信息通常來自HttpResponse對象的結果,但我得到類似的結果:

{"test": {"this is":"what I am supposed to get"}} 

所以基本上它應該返回一個JSON字符串,我得到的東西完全不同於我需要什麼

HttpResponseProxy{HTTP/1.1 200 OK [Cache-Control: no-store, no-cache, must-revalidate, max-age=0,post-check=0, pre-check=0 etc etc etc 

我似乎無法理解我在做什麼錯。

+0

http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http /HttpResponse.html?is-external=true – immibis

+0

@immibis謝謝!但我不是一個貿易開發者,而且我已經寫了很多東西,這讓我付出了很多努力和自我學習。我被置於一個非常奇特的位置,在這個位置我負責做我不知道的事情。對於我閱讀的內容來說,上述內容是數十億種數據可以作爲後期請求發送的方式中的一種,我想我可以嘗試將每個方法與我聯繫起來,但我不知道哪一個方法可以滿足我的目的。 –

回答

1

HttpResponse類公開了getEntity方法,該方法返回HttpEntity實例。這提供了訪問響應內容的機制。

您可以使用EntityUtils檢索和消費內容流的實體:

private void getData(){ 
    CloseableHttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead 
    CloseableHttpResponse response = null; 
    HttpEntity entity = null; 

    try { 
     HttpPost request = new HttpPost("url goes here"); 
     StringEntity params = new StringEntity("details={\"process\":\"mobileS\",\"phone\":\"9999999999\"}"); 
     request.addHeader("content-type", "application/x-www-form-urlencoded"); 
     request.setEntity(params); 

     response = httpClient.execute(request); 
     System.out.println(response); 

     // handle response here... 
     if (successful(response)) { 
      entity = response.getEntity(); 
      String content = EntityUtils.toString(entity); 

      System.out.println(content); 
     } 
    } catch (Exception ex) { 
     // handle exception here 
    } finally { 
     EntityUtils.consumeQuietly(entity); 
     if (response != null) response.close(); 
     if (httpClient != null) httpClient.close(); 
    } 
} 

// TODO Customize for your server/interaction 
private boolean successful(HttpResponse response) { 
    return response != null 
      && response.getStatusLine() != null 
      && response.getStatusLine().getStatusCode() == 200; 
} 
+0

如果我閱讀邏輯很好,但是當我運行它時,我仍然沒有得到我想要得到的迴應,沒有任何結果。 –

+0

@sigillum_conf您是否能夠調試並確認響應正在成功發回(即,您收到200 OK(或類似的),而不是400/500類型的錯誤)? – nbrooks

+0

的確,我收到了200回覆​​ –