亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Apache HTTP 客戶端將復雜參數傳遞給 POST 請求?

如何使用 Apache HTTP 客戶端將復雜參數傳遞給 POST 請求?

喵喵時光機 2024-01-17 16:35:56
我嘗試發送POST帶有這樣的正文的請求{  "method": "getAreas",  "methodProperties": {      "prop1" : "value1",      "prop2" : "value2",   }}這是我的代碼static final String HOST = "https://somehost.com";  public String sendPost(String method,      Map<String, String> methodProperties) throws ClientProtocolException, IOException {    HttpPost post = new HttpPost(HOST);    List<NameValuePair> urlParameters = new ArrayList<>();    urlParameters.add(new BasicNameValuePair("method", method));    List<NameValuePair> methodPropertiesList = methodProperties.entrySet().stream()                .map(entry -> new BasicNameValuePair(entry.getKey(), entry.getValue()))                .collect(Collectors.toList());    // ??? urlParameters.add(new BasicNameValuePair("methodProperties", methodPropertiesList));    post.setEntity(new UrlEncodedFormEntity(urlParameters));    try (CloseableHttpClient httpClient = HttpClients.createDefault();        CloseableHttpResponse response = httpClient.execute(post)) {      return EntityUtils.toString(response.getEntity());    }  }但 的構造函數BasicNameValuePair適用(String, String)。所以我需要另一堂課。有什么辦法可以添加methodPropertiesList嗎urlParameters?
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

您的請求看起來像 json 結構,因此發布如下數據:


 class pojo1{

   String method;

   Map<String,String> methodProperties;

 }


String postUrl = "www.site.com";// put in your url

Gson gson = new Gson();

HttpClient httpClient = HttpClientBuilder.create().build();

HttpPost post = new HttpPost(postUrl);

StringEntity postingString = new StringEntity(gson.toJson(pojo1));//gson.tojson()    converts your pojo to json

post.setEntity(postingString);

post.setHeader("Content-type", "application/json");

HttpResponse  response = httpClient.execute(post);


查看完整回答
反對 回復 2024-01-17
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

對于這個問題有一個眾所周知的方法。在大多數情況下,您將創建自己的對象來描述要在 HttpPost 中發送的內容。所以你會得到類似的東西:


static final String HOST = "https://somehost.com";


? public String sendPost(String method,

? ? ? Map<String, String> methodProperties) throws ClientProtocolException, IOException {


? ? HttpPost post = new HttpPost(HOST);

? ? MyResource resource = new MyResource();

? ? resource.setMethod(method);

? ? MyNestedResource nestedResource = new MyNestedResource();

? ? nestedResource.setMethodProperties(methodProperties);

? ? resource.setNestedResourceMethodProperties(nestedResource);


? ? StringEntity strEntity = new StringEntity(gson.toJson(resource));

? ? post.setEntity(strEntity);


? ? try (CloseableHttpClient httpClient = HttpClients.createDefault();

? ? ? ? CloseableHttpResponse response = httpClient.execute(post)) {


? ? ? return EntityUtils.toString(response.getEntity());

? ? }

? }

這通常是您使用嵌套結構處理更復雜的 json 對象的方式。您必須為要發送的資源創建類(在您的示例中,它可能是一個類并在其中使用映射,但通常您也為嵌套對象創建一個類,如果它具有特定的結構)。


查看完整回答
反對 回復 2024-01-17
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊


static final String HOST = "https://somehost.com";


? public String sendPost(String method, Map<String, String> methodProperties) throws ClientProtocolException, IOException {


? ? HttpPost post = new HttpPost(HOST);??

? ? Gson gson = new Gson();


? ? Params params = new Params(method, methodProperties);

? ? StringEntity entity = new StringEntity(gson.toJson(params));? ?

? ? post.setEntity(entity);


? ? try (CloseableHttpClient httpClient = HttpClients.createDefault();

? ? ? ? CloseableHttpResponse response = httpClient.execute(post)) {


? ? ? return EntityUtils.toString(response.getEntity());

? ? }

? }

? class Params {


? ? String method;? ?

? ? Map<String, String> methodProperties;


? ? public Params(String method, Map<String, String> methodProperties) {

? ? ? this.method = method;

? ? ? this.methodProperties = methodProperties;

? ? }


? ? //getters

? }


查看完整回答
反對 回復 2024-01-17
  • 3 回答
  • 0 關注
  • 273 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號