java模拟报文
为了以后节约时间,记录下模拟报文的实现
模拟报文思路:就是后台把接口数据先写在文档里面写死,接口地址不变,在每个接口里面控制是访问的模拟报文还是数据库里面的数据,
对于前端来说所有都是不变的,就是说我们如果把一个接口从模拟报文数据切换到数据库相关的数据,对于前端来说没有任何的影响
基于的技术平台: spring boot1.5.3 + maven + jdk1.8_112 (不过我觉得没什么关系)
1.写一个模拟报文处理的类Message,也可以写完后封装成jar包后面方便用
public class Message {
private final Logger logger = Logger.getLogger(getClass());
public String sendMessage(HttpServletRequest request, Object inputContent){
//得到URI
String uri = request.getRequestURI();
//获取request的json数据,取出所有的键
String requestContent = JSON.toJSONString(inputContent);
JSONObject jsonObject = JSON.parseObject(requestContent);
Set set = jsonObject.keySet();
//读取事先写在request的txt内容
String fileRequestPath = "message" + uri +".json";
String fileContent="";
try{
File file = new File(fileRequestPath);
fileContent=txt2String(file);
}catch (Exception e){
return "请求接口地址错误或文件内部数据不是json";
}
logger.info(fileContent);
//获取txt的json数据,取出所有的键
JSONObject jsonFile = JSON.parseObject(fileContent);
Set setFile = jsonFile.keySet();
//比较输入的键是不是合乎规范
boolean check = isSetEqual(set,setFile);
if(check){
//如果输入的格式和字段都正确,返回写好的txt报文json格式数据
String fileResponsePath = "message" + uri +"Response"+".json";
String rightFile = "";
try{
File fileResponse = new File(fileResponsePath);
rightFile=txt2String(fileResponse);
}catch (Exception e){
return "响应报文地址错误或文件内部数据不是json";
}
JSONObject rightResponse = JSON.parseObject(rightFile);
return rightResponse.toString();
}else {
//如果输入的格式或字段不正确,返回写好的错误数据
String fileResponsePath = "message/error/requestError.json";
String errorFile = "";
try{
File fileResponse = new File(fileResponsePath);
errorFile=txt2String(fileResponse);
}catch (Exception e){
return "响应报文地址错误或文件内部数据不是json";
}
JSONObject errorResponse = JSON.parseObject(errorFile);
return errorResponse.toString();
}
}
//读取txt文件的内容,输出String格式
public String txt2String(File file){
StringBuilder result = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result.append(System.lineSeparator()+s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
//获取request请求的内容
public String readRequestBody(HttpServletRequest request){
InputStream inputStream = null;
BufferedInputStream buf = null;
StringBuffer requestJsonBuffer = null;
try {
inputStream = request.getInputStream();
buf = new BufferedInputStream(inputStream);
byte[] buffer = new byte[1024];
requestJsonBuffer = new StringBuffer();
int a = 0;
while ((a = buf.read(buffer)) != -1){
requestJsonBuffer.append(new String(buffer, 0, a, "UTF-8"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭连接
if (null != buf){
try {
buf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null == requestJsonBuffer ? null : requestJsonBuffer.toString();
}
//用来比较两个Set是否相等,用来比较request内容的键是不是一样的
public boolean isSetEqual(Set set1, Set set2) {
if (set1 == null && set2 == null) {
return true; // Both are null
}
if (set1 == null || set2 == null || set1.size() != set2.size()
|| set1.size() == 0 || set2.size() == 0) {
return false;
}
Iterator ite2 = set2.iterator();
boolean isFullEqual = true;
while (ite2.hasNext()) {
if (!set1.contains(ite2.next())) {
isFullEqual = false;
}
}
return isFullEqual;
}
}
Meaasge类的原理:写一个request相关的文档,一个response相关的文档,调用接口的时候拿请求的数据和request里面的数据进行比较,如果参数都对,
我们就返回response中的内容,如果参数有问题,我们就返回特地的错误信息
2.在跟目录下新建message目录,message目录下新建test和error文件,两个文件夹下面再建具体的request和response的json文件
(目录和文件名字可以自己定,不过要跟message中对应好)

3.在具体的接口中使用模拟报文
在类的前面声明
@Autowired
private HttpServletRequest request;
然后在接口中写:

一句话调用Message类的sendMessage函数就可以实现模拟报文了,后面我们要改过来改下return就可以了,对于前端来说是感觉不到任何改变的,可以加快项目的开发
java模拟报文的更多相关文章
- java模拟post请求发送json
java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: package main ...
- java 模拟qq源码
java 模拟qq源码: http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip
- java模拟开锁
java模拟开锁 service qq:928900200 Introduction to Computer Science II: CSCI142Fall 2014Lab #1Instructor: ...
- Jsoup实现java模拟登陆
Jsoup实现java模拟登陆 2013-10-29 14:52:05| 分类: web开发|举报|字号 订阅 下载LOFTER我的照片书 | 1:如何获取cookies. 1.1 ...
- [Java] 模拟HTTP的Get和Post请求
在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求 ...
- Java模拟登录系统抓取内容【转载】
没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下.... 为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...
- Java模拟登陆02【转载】
在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢? 方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...
- java socket报文通信(一)socket的建立
java socket报文通信(一) socket的建立 今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Contro ...
- java模拟浏览器包selenium整合了htmlunit,火狐浏览器,IE浏览器,opare浏览器驱
//如果网页源码中有些内容是js渲染过来的,那你通过HttpClient直接取肯定取不到,但是这些数据一般都是通过异步请求传过来的(一般都是通过ajax的get或者post方式).那么你可以通过火狐浏 ...
随机推荐
- Apache设置404页面
使用版本:Apache 2.2 1.添加404页面 在所配置网站的根目录添加编辑好的 404.html (页面名字无所谓 比如也可以叫missing.html) 如C:\Program Files\A ...
- js 解析本地Excel文件!
通常,一般读取Excel都是由后台来处理,不过如果需求要前台来处理,也是可以的.. 1.需要用到js-xlsx,下载地址:js-xlsx 2.demo: <!DOCTYPE html>&l ...
- JS中直接调用后台静态方法
这两天在维护一个很久之前的老项目,需要在jsp中增加显示一些新的模块,需要连表查询数据库返回数据 最开始想到的是用ajax,但是由于项目十几年前的老项目(jsp页面都是最原始的拼接组成,没有单独的js ...
- lib-flexble 使用遇到的bug及解决方案
1 lib-flexble解决微信端长按不能弹出识别二维码功能 加viewport就完美解决 flexble可以自动完成 一般情况不建议加 但是么 bug出来了 加上就好了 2 Font Boos ...
- 存储容量和IOPS的关系
在云计算时代,数据量成几何形式增加,必然会考虑增加存储容量,但是增加存储容量不简单存储性能得到提升,他们之间没有必然的联系: 存储容量,就是指存储设备上能够存储数据的大小,比如,一个磁盘阵列有50T的 ...
- 完美实现在同一个页面中使用不同样式的artDialog样式
偶然发现artDialog.js这个插件,就被其优雅的设计及漂亮的效果深深吸引,在做例子时碰到了一些想当然它应该提供但却没有提供的功能,不过这都不影响我对它的喜爱,下面说一下遇到的问题吧! artDi ...
- 七牛整合 ueditor (拦住那头牛,七牛又如何)
最近遇到个项目,要求所有图片都必须整合到七牛上,看了把你谈文档踩在前辈们的基础上终于把他完成了,恰巧本屌丝最近刚好有时间,本着天下屌丝是一家的原则,和小朋友们一同学习 闲话少说入正题. 第一 :下载编 ...
- 前端模块化——seaJS
1.seaJS手记 一:Bower获取 要安装bower Npm install -g bower Bower install seajs 二:Use方法是整个项目的入口方法,通常一个项目中只调用一次 ...
- Jfinal中Db类的的使用
Jfinal提供了两种操作数据库的组件,分别是Model类和DB类,可以极大地减少代码量,提高开发效率. Db类提供了在Model类之外更丰富的的数据库操作能力,使用Db类以及嵌套的Record类时, ...
- html部署到tomcat
首先电脑上应该装好java和Tomcat,并设置好它们的环境变量. 设置完成后,启动Tomcat ,点击\bin\tomcat6,打开浏览器输入网址:http://localhost:8080,如果出 ...