如何使用带有HashMap的HTTPClient作为一个参数发送POST请求

时间:2015-04-17 05:00:37

标签: java httpclient

我想发送带有许多字符串参数的Post请求以及一个HashMap对象。怎么做?

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
public class PostRequest {

    public static void main(String args[]) throws Exception{


      String url="http://url";      
      PostMethod post=new PostMethod(url);
      post.setParameter("param1","abc");
      post.setParameter("param2","1");
      HttpClient httpclient = new HttpClient();
      int a = httpclient.executeMethod(post);
      System.out.println("I::::::::::::::::" + a);      
      String postResp = post.getResponseBodyAsString();
      System.out.println("response::::" + postResp);      
    }
}

在上面的代码中,我还想在请求中发送HashMap对象。

HashMap hm = new HashMap(); 
hm.put("key","value"); 
//Set this param in URL. 
post.setParameter("paramname",hm);

请帮忙。

4 个答案:

答案 0 :(得分:2)

尝试将您的hashmap转换为JSON字符串并放入post参数。之后,您可以从该JSON字符串重新创建hashmap。

    Map<String, String> myMap = new HashMap<String, String>();
    myMap.put("MyKey", "MyValue");
    String jsonMap = new Gson().toJson(myMap);
    System.out.println(jsonMap);
    /*
     * output :{"MyKey":"MyValue"}
     */

    Map<String, String> myOriginalMap = new HashMap<String, String>();
    myOriginalMap = new Gson().fromJson(jsonMap, HashMap.class);
    System.out.println(myOriginalMap);
    /*
     * output : {MyKey=MyValue}`enter code here`
     */`enter code here`

答案 1 :(得分:0)

如果我理解正确,下面的更改将对您有所帮助;

PostMethod post=new PostMethod(url);
for (Entry<String, String> entry : map.entrySet()) {
    post.setParameter(entry.getKey(), entry.getValue());
}

答案 2 :(得分:0)

您可以将所有字符串放在HashMap中,然后可以从中创建JSON对象。您可以将此JSON添加到帖子post.setEntity(se);,其中se是包含您的JSON的StringEntity,例如StringEntity se = new StringEntity(json.toString());

现在,您可以将'post'传递给executeMethod。

答案 3 :(得分:-1)

您可以将hashMap作为参数传递给方法,然后在使用PostMethod时预先传递hashMap。

最诚挚的问候, 詹姆斯