在使用java + httpClient施行API自动化时,不可避免地遇到了如下问题:

1. 用Http Response数据做断言;

2. 用上一个请求的Response内容,作为下一个请求的参数;

如果用jmeter来做的话,首选当然是BeanShell。然而,当需要自己写的时候(通过java + httpClient),在此我用到了FastJson。

1. 以一个Post请求为例,代码如下:

     public CloseableHttpResponse post(String url , String entityString , HashMap<String , String> headermap)
throws ClientProtocolException, IOException {
//创建一个可关闭的 httpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建一个HttpPost的请求对象
HttpPost httpPost = new HttpPost(url);
//设置payload
httpPost.setEntity(new StringEntity(entityString));
//加载请求头到HttpPost对象
for (Map.Entry<String , String> entry : headermap.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
//发送post请求
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
return httpResponse;
}

2. 发送Post请求后,我们会得到一个CloseableHttpResponse。接下来,我们提取状态码(status):

 int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();

  3. 提取返回实体(httpEntity):

 HttpEntity entity = closeableHttpResponse.getEntity();
System.out.println(entity);

此时的输出结果为:

4. HttpEntity 转化为 String:

 String responseEntity = EntityUtils.toString(entity);
System.out.println(responseEntity);

此时的输出结果为String格式,提取code、message等值,只能通过字符串截取:

5. String 转化为 JsonObject:

 JSONObject jsonObject = JSON.parseObject(responseEntity);
System.out.println(jsonObject);

此时的输出结果为JsonObject格式:

6. 提取code、message的值:

 String responseCode = jsonObject.getString("code");
String responseMessage = jsonObject.getString("message");

7. 提取orderId:

 //由于info的值是json格式(或可理解为key-value集合),提取info的值为JSONObject格式
JSONObject infoObject = jsonObject.getJSONObject("info");
//重复步骤6,提取orderId
String orderId= jsonObject.getString("orderId");
//或通过将infoObject转化为HashMap,再进行提取orderId
HashMap<String, Object> info = new HashMap<String, Object>();
info = JSON.parseObject(String.valueOf(infoObject), new TypeReference<HashMap<String, Object>>() {});
String orderId = info.get("orderId").toString();

FastJson - 从HttpEntity到Json的更多相关文章

  1. java分享第十三天(fastjson生成和解析json数据,序列化和反序列化数据)

     fastjson简介:Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack ...

  2. fastjson生成和解析json数据,序列化和反序列化数据

    本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...

  3. fastjson生成和解析json数据

    本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...

  4. 记一次FastJSON和Jackson解析json时遇到的中括号问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...

  5. Java基础/利用fastjson序列化对象为JSON

    利用fastjson序列化对象为JSON 参考博客:http://blog.csdn.net/zeuskingzb/article/details/17468079 Step1:定义实体类 //用户类 ...

  6. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  7. FastJSON 简介及其Map/JSON/String 互转

    在日志解析,前后端数据传输交互中,经常会遇到 String 与 map.json.xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言.跨前后端的事实上的标准数据交互格式.应该来说各个 ...

  8. jackjson和fastjson进行Bean与json互换

    1.jackjson 1.bean到json ObjectMapper m = new ObjectMapper(); String value = m.writeValueAsString(bean ...

  9. json小结和fastjson包的实际json操作

    工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是json,今天就来聊一聊json,主要分析json数据和java Bean之间的转换问题. 一.json是什么 ...

随机推荐

  1. html拼接时onclick事件传递json对象

    Bootstrap Table 中拼装onclick传递json对象会造成[object,object]错误,反正各种传值不成功, 应该是因为json对象中的‘’‘’引号冲突吧,直接把json对象转成 ...

  2. java 编写小工具 尝试 学习(二)

    1. 新建一个窗口  ,代码 如下 ,截图 如下 package jFrameDemo; import javax.swing.JFrame; import javax.swing.WindowCon ...

  3. 撸一个简单的MVVM例子

    我个人以为mvvm框架里面最重要的一点就是VM这部分,它要与Model层建立联系,将Model层转换成可以被View层识别的数据结构:其次也要同View建立联系,将数据及时更新到View层上,并且响应 ...

  4. Python 多客户端

    服务端代码 #引入socketserver模块 import socketserver #定义处理类必须继承BaseRequestHandler类 class my_server(socketserv ...

  5. MySQL学习【第三篇用户管理】

    一.用户管理 1.给mysql用户设密码以及删除用户 1.给mysql的root用户设置密码 [root@db02 scripts]# mysqladmin -uroot -p password '1 ...

  6. PHP的抽象类和抽象方法以及接口总结

    PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下: 抽象类:1.如果一个类中有一个方法是抽象方法,则这个类就是抽象类: ...

  7. VirtualBox复制的虚拟机无法获取IP解决办法

    自从建立了这个账号后写了一篇,好几年没来了,今天来看看,顺便分享一下. 昨天晚上想玩玩zookeeper集群,在vb里复制了一台主机,可怎么也无法获取IP,经研究,终于还是解决了. 1.复制主机时勾选 ...

  8. Python模块、包、异常、文件(案例)

    Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...

  9. 坑爹的jquery ui datepicker

    1.坑爹的jquery ui datepicker 竟然不支持选取时分秒,害的我Format半天 期间尝试了bootstrap的ditepicker,但是不起作用,发现被jquery ui 覆盖了, ...

  10. Redis(八):Redis的复制(Master/Slave)

    Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...