分享

使用HttpClient通过post方式发送json数据

 liang1234_ 2016-01-17

 有时候我们在发送HTTP请求的时候会使用到POST方式,如果是传送普通的表单数据那将很方便,直接将参数到一个Key-value形式的Map中即可。但是如果我们需要传送的参数是Json格式的,会稍微有点麻烦,我们可以使用HttpClient类库提供的功能来实现这个需求。假设我们需要发送的数据是:

1{
2    "blog""http://www.",
3    "Author""iteblog"
4}

我们可以通过JSONObject够着Json:

1JSONObject jsonObject = new JSONObject();
2 
3jsonObject.put("blog""http://www.");
4jsonObject.put("Author""iteblog");

如果需要使用Post方式来发送这个数据,我们可以如下实现:

01private HttpMethodBase createMethod(String url, int timeout) {
02        PostMethod method = null;
03        try {
04            method = new PostMethod(url);
05            JSONObject jsonObject = new JSONObject();
06 
07            jsonObject.put("blog""http://www.");
08            jsonObject.put("Author""iteblog");
09 
10            String transJson = jsonObject.toString();
11            RequestEntity se = newStringRequestEntity(transJson, "application/json""UTF-8");
12            method.setRequestEntity(se);
13            //使用系统提供的默认的恢复策略
14            method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, newDefaultHttpMethodRetryHandler());
15            //设置超时的时间
16            method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, timeout);
17        catch (IllegalArgumentException e) {
18            logger.error("非法的URL:{}", url);
19        catch (UnsupportedEncodingException e) {
20            e.printStackTrace();
21        }
22 
23        return method;
24}

  我们通过StringRequestEntity来构造请求实体,在这里,StringRequestEntity将接收三个参数,如下:

1publicStringRequestEntity(String content, String contentType, String charset)
2  throws UnsupportedEncodingException

  其中参数content就是我们需要传输的数据;contentType是传送数据的格式,因为我们的数据格式是json的,所以contentType必须填写application/json(更多的contentType可以参见《HTTP Content-Type常用一览表》);charset是字符集编码。

  然后我们再通过HttpClient对象的executeMethod方法来执行:

1int statusCode = httpClient.executeMethod(getMethod);
2//只要在获取源码中,服务器返回的不是200代码,则统一认为抓取源码失败,返回null。
3if (statusCode != HttpStatus.SC_OK) {
4      logger.error("Method failed: " + getMethod.getStatusLine() + "\tstatusCode: "+ statusCode);
5      return null;
6}

总结:

1.简单的解析json字符串

首先将json字符串转换为json对象,然后再解析json对象,过程如下。
JSONObject jsonObject = JSONObject.fromObject(jsonStr);

  1. <pre></pre><span style="white-space:pre"></span>  
  2. <pre></pre>  
  根据json中的键得到它的值
String name = jsonObject.getString("name");
int num = jsonObject.getInt("num");
String sex = jsonObject.getString("sex");
int age = jsonObject.getInt("age");

例子:
  1. private static void TestJsonAttribute() {  
  2.         /** 
  3.          * 创建json对象并为该对象设置属性 
  4.          */  
  5.         JSONObject jsonObj = new JSONObject();  
  6.         jsonObj.put("Int_att",25);//添加int型属性  
  7.         jsonObj.put("String_att","str");//添加string型属性  
  8.         jsonObj.put("Double_att",12.25);//添加double型属性  
  9.         jsonObj.put("Boolean_att",true);//添加boolean型属性  
  10.         //添加JSONObject型属性  
  11.         JSONObject jsonObjSon = new JSONObject();  
  12.         jsonObjSon.put("id"1);  
  13.         jsonObjSon.put("name""tom");  
  14.         jsonObj.put("JSONObject_att",jsonObjSon);  
  15.         //添加JSONArray型属性  
  16.         JSONArray jsonArray = new JSONArray();  
  17.         jsonArray.add("array0");  
  18.         jsonArray.add("array1");  
  19.         jsonArray.add("array2");  
  20.         jsonArray.add("array3");  
  21.         jsonObj.put("JSONArray_att", jsonArray);  
  22.         System.out.println(jsonObj.toString());  
  23.         System.out.println("Int_att:"+jsonObj.getInt("Int_att"));  
  24.         System.out.println("String_att:"+jsonObj.getString("String_att"));  
  25.         System.out.println("Double_att:"+jsonObj.getDouble("Double_att"));  
  26.         System.out.println("Boolean_att:"+jsonObj.getBoolean("Boolean_att"));  
  27.         System.out.println("JSONObject_att:"+jsonObj.getJSONObject("JSONObject_att"));  
  28.         System.out.println("JSONArray_att:"+jsonObj.getJSONArray("JSONArray_att"));  
  29.     }  

2.将json字符串转换为java对象

同样先将json字符串转换为json对象,再将json对象转换为java对象,如下所示。
JSONObject obj = new JSONObject().fromObject(jsonStr);//将json字符串转换为json对象
将json对象转换为java对象
Person jb = (Person)JSONObject.toBean(obj,Person.class);//将建json对象转换为Person对象

3.将java对象转换为json字符串

先将java对象转换为json对象,在将json对象转换为json字符串
JSONObject json = JSONObject.fromObject(obj);//将java对象转换为json对象
String str = json.toString();//将json对象转换为字符串

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多