go mockweb接口_rpc接口mock平台

转载:http://blog.csdn.net/ronghuanye/article/details/71124320

1、简介

平台采用struts、spring、mybatis框架开发设计,主要用来管理mock接口数据,也可以用来管理接口自动化,并集成一些常用工具。

2、架构设计

web.xml

xmlns=" http://java.sun.com/xml/ns/j2ee"

xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=" http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

login.jsp

webAppRootKey

webApp.SM1

contextConfigLocation

classpath:applicationContext.xml

org.springframework.web.context.ContextLoaderListener

slf4j-log4j12

1.5.8

log4j

log4j

1.2.13

log4jConfigLocation

classpath:log4j.properties

log4jRefreshInterval

60000

org.springframework.web.util.Log4jConfigListener

Struts2

org.apache.struts2.dispatcher.FilterDispatcher

Struts2

*.jsp

Struts2

*.action

view层

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import com.huawei.vmall.test.service.MockService;

import com.huawei.vmall.test.util.BaseAction;

import com.huawei.vmall.test.util.Utils;

import net.sf.json.JSONObject;

public class MockAction extends BaseAction{

private static final long serialVersionUID = 1L;

private Logger logger = Logger.getLogger(MockAction.class);

@Autowired

private MockService mockService;

private int id;

private int status;

private String interfaceName;

private String methodName;

private String paramTypes;

private String paramJson;

private String returnType;

private String returnJson;

private int page;

private int rows;

//web query mock

public  void  getMock() {

String res = "";

try

{

Map map = new HashMap();

map.put("page", this.getPage());

map.put("rows", this.getRows());

res = mockService.getMock(map);

this.sendMsg(res);

}

catch(Exception e)

{

logger.error(e);

this.sendMsg("{\"success\":false,\"errorMsg\":\"" + e.toString() + "\"}");

}

}

//filter query mock

public  void  goMock() {

List> res = null;

try

{

//json对象

JSONObject jsonObj = JSONObject.fromObject(Utils.getPostContent(this.getRequest()));

Map map = new HashMap();

map.put("interfaceName", jsonObj.getString("interfaceName"));

map.put("methodName",jsonObj.getString("methodName"));

map.put("paramTypes", jsonObj.getString("paramTypes"));

map.put("paramJson", jsonObj.getString("paramJson"));

map.put("returnType", jsonObj.getString("returnType"));

res = mockService.goMock(map);

if(res.size()>0)

{

this.sendMsg("{\"success\":true,\"message\":"+JSONObject.fromObject(res.get(0)).toString()+"}");

} else {

this.sendMsg("{\"success\":true,\"message\":\"\"}");

}

}

catch(Exception e)

{

logger.error(e);

this.sendMsg("{\"success\":false,\"errorMsg\":\"" + e.toString() + "\"}");

}

}

//filter add mock

public  void  addMock() {

try

{

//json对象

JSONObject jsonObj = JSONObject.fromObject(Utils.getPostContent(this.getRequest()));

Map map = new HashMap();

map.put("interfaceName", jsonObj.getString("interfaceName"));

map.put("methodName",jsonObj.getString("methodName"));

map.put("paramTypes", jsonObj.getString("paramTypes"));

map.put("paramJson", jsonObj.getString("paramJson"));

map.put("returnType", jsonObj.getString("returnType"));

map.put("returnJson", jsonObj.getString("returnJson"));

map.put("status", 0);

mockService.addMock(map);

this.sendMsg("{\"success\":true,\"message\":\"执行成功\"}");

}

catch(Exception e)

{

logger.error(e);

this.sendMsg("{\"success\":false,\"errorMsg\":\"" + e.toString() + "\"}");

}

}

//web add Mock

public  void  newMock() {

try

{

Map map = new HashMap();

map.put("interfaceName", this.getInterfaceName());

map.put("methodName",this.getMethodName());

map.put("paramTypes", this.getParamTypes());

map.put("paramJson", this.getParamJson());

map.put("returnType", this.getReturnType());

map.put("returnJson", this.getReturnJson());

map.put("status", this.getStatus());

mockService.addMock(map);

this.sendMsg("{\"success\":true,\"message\":\"执行成功\"}");

}

catch(Exception e)

{

logger.error(e);

this.sendMsg("{\"success\":false,\"errorMsg\":\"" + e.toString() + "\"}");

}

}

//update mock

public  void  updateMock() {

try

{

Map map = new HashMap();

map.put("interfaceName", this.getInterfaceName());

map.put("methodName",this.getMethodName());

map.put("paramTypes", this.getParamTypes());

map.put("paramJson", this.getParamJson());

map.put("returnType", this.getReturnType());

map.put("returnJson", this.getReturnJson());

map.put("status", this.getStatus());

map.put("id", this.getId());

mockService.updateMock(map);

this.sendMsg("{\"success\":true,\"message\":\"执行成功\"}");

}

catch(Exception e)

{

logger.error(e);

this.sendMsg("{\"success\":false,\"errorMsg\":\"" + e.toString() + "\"}");

}

}

//delete Mock

public  void  deleteMock() {

try

{

Map map = new HashMap();

map.put("id", this.getId());

mockService.deleteMock(map);

this.sendMsg("{\"success\":true,\"message\":\"执行成功\"}");

}

catch(Exception e)

{

logger.error(e);

this.sendMsg("{\"success\":false,\"errorMsg\":\"" + e.toString() + "\"}");

}

}

public int getId()

{

return id;

}

public void setId(int id)

{

this.id = id;

}

public int getStatus()

{

return status;

}

public void setStatus(int status)

{

this.status = status;

}

public String getInterfaceName()

{

return interfaceName;

}

public void setInterfaceName(String interfaceName)

{

this.interfaceName = interfaceName;

}

public String getMethodName()

{

return methodName;

}

public void setMethodName(String methodName)

{

this.methodName = methodName;

}

public String getParamTypes()

{

return paramTypes;

}

public void setParamTypes(String paramTypes)

{

this.paramTypes = paramTypes;

}

public String getParamJson()

{

return paramJson;

}

public void setParamJson(String paramJson)

{

this.paramJson = paramJson;

}

public String getReturnType()

{

return returnType;

}

public void setReturnType(String returnType)

{

this.returnType = returnType;

}

public String getReturnJson()

{

return returnJson;

}

public void setReturnJson(String returnJson)

{

this.returnJson = returnJson;

}

public int getPage()

{

return page;

}

public void setPage(int page)

{

this.page = page;

}

public int getRows()

{

return rows;

}

public void setRows(int rows)

{

this.rows = rows;

}

}

service层

import java.util.List;

import java.util.Map;

import com.huawei.vmall.test.util.PaginationResultImpl;

import com.huawei.vmall.test.util.TmasException;

public interface MockService {

String getMock(Map map) throws TmasException;

List> goMock(Map map) throws TmasException;

void addMock(Map map) throws TmasException;

void updateMock(Map map);

void deleteMock(Map map);

}

import java.util.List;

import java.util.Map;

import org.apache.ibatis.session.RowBounds;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.huawei.vmall.test.mapper.MockMapper;

import com.huawei.vmall.test.util.PaginationResultImpl;

import com.huawei.vmall.test.util.TmasException;

import net.sf.json.JSONArray;

@Service("MockService")

public class MockServiceImpl implements MockService {

@Autowired

private MockMapper mockMapper;

public String getMock(Map map) throws TmasException

{

// 总行数

int rowTotal = mockMapper.queryMockCount();

int page = Integer.parseInt(map.get("page").toString());

int rows = Integer.parseInt(map.get("rows").toString());

map.put("offset", (page-1)*rows);

List> list = mockMapper.getMock(map);

return "{\"total\":\""+rowTotal+"\",\"rows\":"+JSONArray.fromObject(list).toString()+"}";

}

@Override

public List> goMock(Map map) throws TmasException

{

return mockMapper.goMock(map);

}

@Override

public void addMock(Map map) throws TmasException

{

mockMapper.addMock(map);

}

@Override

public void updateMock(Map map)

{

mockMapper.updateMock(map);

}

@Override

public void deleteMock(Map map)

{

mockMapper.deleteMock(map);

}

}

dao层

import java.util.List;

import java.util.Map;

import org.apache.ibatis.session.RowBounds;

public interface MockMapper {

List> getMock(Map map);

List> goMock(Map map);

void addMock(Map map);

void updateMock(Map map);

void deleteMock(Map map);

int queryMockCount();

}

SELECT count(*) from mock

SELECT * from mock order by id LIMIT #{offset},#{rows};

SELECT status,returnJson from mock where

interfaceName=#{interfaceName} and

methodName=#{methodName} and

paramTypes=#{paramTypes}

insert into mock(interfaceName,

methodName,

paramTypes,

paramJson,

returnType,

returnJson,

keyword,

status)

VALUES(#{interfaceName},

#{methodName},

#{paramTypes},

#{paramJson},

#{returnType},

#{returnJson},

'',

#{status})

update mock set

interfaceName=#{interfaceName},

methodName=#{methodName},

paramTypes=#{paramTypes},

paramJson=#{paramJson},

returnType=#{returnType},

status=#{status}

where id = #{id}

DELETE FROM mock where id = #{id}

util类:

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.util.Properties;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.httpclient.params.HttpMethodParams;

import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import com.mysql.jdbc.Connection;

import com.mysql.jdbc.PreparedStatement;

import com.mysql.jdbc.Statement;

@SuppressWarnings("deprecation")

public class Utils {

public static String getConfig(File file,String key){

String value = "";

try {

FileInputStream fis = new FileInputStream(file);

Properties prop = new Properties();

prop.load(fis);

value = prop.getProperty(key);

} catch (Exception e) {

e.printStackTrace();

}

return value;

}

public static Connection getConn(File file){

Connection connection = null;

//File file;

String url;

String username;

String passwd;

try {

//file = new File("config/yslow.config");

url = Utils.getConfig(file, "mysql_url");

username = Utils.getConfig(file, "mysql_username");

passwd = Utils.getConfig(file, "mysql_passwd");

Class.forName("com.mysql.jdbc.Driver");

connection = (Connection)DriverManager.getConnection(url, username, passwd);

} catch (Exception e) {

e.printStackTrace();

}

return connection;

}

public static ResultSet execSQL(String sql, File file){

ResultSet rs = null;

Statement stat = null;

try {

stat = (Statement) Utils.getConn(file).createStatement();

rs = stat.executeQuery(sql);

} catch (Exception e) {

System.out.println("数据库参数配置错误,请检查。。。");

e.printStackTrace();

}

return rs;

}

public static ResultSet execSQL(String sql,String param,File file){

PreparedStatement pStatement = null;

ResultSet rs = null;

try {

pStatement = (PreparedStatement) Utils.getConn(file).prepareStatement(sql);

pStatement.execute(sql);

} catch (Exception e) {

e.printStackTrace();

}

return rs;

}

@SuppressWarnings("finally")

public static String httpPost(String url,String jsonParam){

DefaultHttpClient client = new DefaultHttpClient();

client.getParams().setParameter(HttpMethodParams.USER_AGENT, "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0");

HttpPost post = new HttpPost(url);

HttpResponse response = null;

String respStr = "";

if (jsonParam.length() == 0){

client.close();

return "";

}

try {

StringEntity entity = new StringEntity(jsonParam,"utf-8");

entity.setContentEncoding("UTF-8");

entity.setContentType("application/json");

post.setEntity(entity);

response = client.execute(post);

//获取响应数据

InputStreamReader reader = new InputStreamReader(response.getEntity().getContent(),"UTF-8");

BufferedReader br = new BufferedReader(reader);

String line = null;

StringBuilder sb = new StringBuilder();

while((line = br.readLine())!=null){

sb.append(line);

}

respStr = sb.toString();

} catch (Exception e) {

e.printStackTrace();

}

finally {

client.close();

return respStr;

}

}

/**

*  读取POST请求内容数据.

*  HttpServletRequest request

*/

@SuppressWarnings("finally")

public static String getPostContent(HttpServletRequest request) {

BufferedReader br;

String line = null;

StringBuilder sb = null;

String result = "";

try {

InputStreamReader reader = new InputStreamReader(request.getInputStream(),"UTF-8");

br = new BufferedReader(reader);

sb = new StringBuilder();

while((line = br.readLine())!=null){

sb.append(line);

}

result = sb.toString();

}

catch (Exception e)

{

e.printStackTrace();

}

finally {

return result;

}

}

}

静态页面html

index.html

TCEP

$(document).ready(function(e)

{

setNavigationBar("接口MOCK", "MOCK管理");

});

/**

* 更改导航栏名称

* @param bar1: 上一层的名称

* @param bar2: 当前层的名称

*/

function setNavigationBar(bar1, bar2)

{

currentFuncName = [];

currentFuncName.push(bar1);

var trHtml = bar1;

if (bar2)

{

currentFuncName.push(bar2);

trHtml += " > "+ bar2;

}

getByClass("panel-with-icon")[0].innerHTML=trHtml;;

}

/*

*通过classname获取元素

*

*/

function getByClass(sClass){

var aResult=[];

var aEle=document.getElementsByTagName('*');

for(var i=0;i

/*将每个className拆分*/

var arr=aEle[i].className.split(/\s+/);

for(var j=0;j

/*判断拆分后的数组中有没有满足的class*/

if(arr[j]==sClass){

aResult.push(aEle[i]);

}

}

}

return aResult;

};

mock.html

url="mock!getMock.action" toolbar="#toolbar" pagination="true"

rownumbers="true" fitColumns="true" singleSelect="true">

接口服务接口方法参数类型参数JSON返回类型返回JSONmock开关(0关,1开)

closed="true" buttons="#dlg-buttons">

Mock Information

请输入0或者1 (0-关闭mock,1-开启mock)

var url;

function newMock(){

$('#dlg').dialog('open').dialog('center').dialog('setTitle','New Mock');

$('#fm').form('clear');

url = 'mock!newMock.action';

}

function editMock(){

var row = $('#dg').datagrid('getSelected');

if (row){

$('#dlg').dialog('open').dialog('center').dialog('setTitle','Edit Mock');

$('#fm').form('load',row);

url = 'mock!updateMock.action?id='+row.id;

}

}

function saveMock(){

$('#fm').form('submit',{

url: url,

onSubmit: function(){

return $(this).form('validate');

},

success: function(result){

var result = eval('('+result+')');

if (result.errorMsg){

$.messager.show({

title: 'Error',

msg: result.errorMsg

});

} else {

$('#dlg').dialog('close');        // close the dialog

$('#dg').datagrid('reload');    // reload the user data

}

}

});

}

function destroyMock(){

var row = $('#dg').datagrid('getSelected');

if (row){

$.messager.confirm('Confirm','Are you sure you want to delete this mock?',function(r){

if (r){

$.post('mock!deleteMock.action',{id:row.id},function(result){

if (result.success){

$('#dg').datagrid('reload');    // reload the user data

} else {

$.messager.show({    // show error message

title: 'Error',

msg: result.errorMsg

});

}

},'json');

}

});

}

}

jsonFormat.html

spellcheck="false" placeholder="请输入需要格式化的json字符串">

格式化

 压缩 

 清空 

//格式化

$("#validate").click(function(){

var v =$("#json_input").val();

var v1 = format(v,false);

if(v1){

$("#json_input").val(v1);

}

});

//压缩

$("#compress").click(function(){

var v =$("#json_input").val();

var v1 = format(v,true);

if(v1){

$("#json_input").val(v1);

}

});

//json格式化函数

function format(txt,compress/*是否为压缩模式*/){/* 格式化JSON源码(对象转换为JSON文本) */

var indentChar = '    ';

if(/^\s*$/.test(txt)){

openTipWin('数据为空,无法格式化!');

return;

}

try{var data=eval('('+txt+')');}

catch(e){

openTipWin('数据源语法错误,格式化失败!');

return;

};

var draw=[],last=false,This=this,line=compress?'':'\n',nodeCount=0,maxDepth=0;

var notify=function(name,value,isLast,indent/*缩进*/,formObj){

nodeCount++;/*节点计数*/

for (var i=0,tab='';i

tab=compress?'':tab;/*压缩模式忽略缩进*/

maxDepth=++indent;/*缩进递增并记录*/

if(value&&value.constructor==Array){/*处理数组*/

draw.push(tab+(formObj?('"'+name+'":'):'')+'['+line);/*缩进'[' 然后换行*/

for (var i=0;i

notify(i,value[i],i==value.length-1,indent,false);

draw.push(tab+']'+(isLast?line:(','+line)));/*缩进']'换行,若非尾元素则添加逗号*/

}else   if(value&&typeof value=='object'){/*处理对象*/

draw.push(tab+(formObj?('"'+name+'":'):'')+'{'+line);/*缩进'{' 然后换行*/

var len=0,i=0;

for(var key in value)len++;

for(var key in value)notify(key,value[key],++i==len,indent,true);

draw.push(tab+'}'+(isLast?line:(','+line)));/*缩进'}'换行,若非尾元素则添加逗号*/

}else{

if(typeof value=='string')value='"'+value.replace(/\"/g,"\\\"")+'"'; /* value中双引号加上转移斜杠 */

draw.push(tab+(formObj?('"'+name+'":'):'')+value+(isLast?'':',')+line);

};

};

var isLast=true,indent=0;

notify('',data,isLast,indent,false);

return draw.join('');

}

js

jquery-easyui-1.5.2

common.js

var w;

function openTipWin(message){

var mes = message + '';

w = new PopWin(message);

w.setWidthHeight(400,150);

w.show();

}

function closeTipWin(){

w.removeObj();

}

function PopWin(str) {

var msgw, msgh, bordercolor;

msgw = 400;//提示窗口的宽度

msgh = 210;//提示窗口的高度

titleheight = 25 //提示窗口标题高度

bordercolor = "#336699";//提示窗口的边框颜色/标题颜色

bgObj = document.createElement("div");//创建一个div对象(背景层)

msgObj = document.createElement("div")//创建一个div对象(提示框层)

var title = document.createElement("h4");//创建一个h4对象(提示框标题栏)

// 设置对话框的宽和高

this.setWidthHeight = function(w, h) {

msgw = w;

msgh = h;

}

this.show = function() {

var sWidth, sHeight;

sWidth = document.body.offsetWidth;//浏览器工作区域内页面宽度

sHeight = screen.height;//屏幕高度(垂直分辨率)

var scrollTop = document.documentElement.scrollTop;

// if (self.frameElement && self.frameElement.tagName == "IFRAME") {

// if (!self.frameElement.contentDocument) {

// sWidth = self.frameElement.contentDocument.body.offsetWidth;

// sHeight = self.frameElement.contentDocument.body.offsetHeight;

// } else {

// sWidth = self.frameElement.Document.body.offsetWidth;

// sHeight = self.frameElement.Document.body.offsetHeight;

// }

// scrollTop = window.parent.document.documentElement.scrollTop;

// }

//背景层(大小与窗口有效区域相同,即当弹出对话框时,背景显示为放射状透明灰色)

//this.bgObj=document.createElement("div");//创建一个div对象(背景层)

//定义div属性,即相当于

//

bgObj.setAttribute('id', 'bgDiv');

bgObj.style.position = "absolute";

bgObj.style.top = "0";

bgObj.style.background = "#777";

bgObj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75";

bgObj.style.opacity = "0.6";

bgObj.style.left = "0";

bgObj.style.width = sWidth + "px";

bgObj.style.height = sHeight + "px";

bgObj.style.zIndex = "10000";

document.body.appendChild(bgObj);//在body内添加该div对象

//this.msgObj=document.createElement("div")//创建一个div对象(提示框层)

//定义div属性,即相当于

//

msgObj.setAttribute("id", "msgDiv");

msgObj.setAttribute("align", "center");

msgObj.style.background = "white";

msgObj.style.border = "1px solid " + bordercolor;

msgObj.style.position = "absolute";

msgObj.style.left = "50%";

msgObj.style.top = scrollTop + 150 + "px";

msgObj.style.font = "12px/1.6em Verdana, Geneva, Arial, Helvetica, sans-serif";

msgObj.style.marginLeft = "-225px";

msgObj.style.marginTop = "0px";

msgObj.style.width = msgw + "px";

msgObj.style.height = msgh + "px";

msgObj.style.textAlign = "center";

msgObj.style.lineHeight = "25px";

msgObj.style.zIndex = "10001";

//var title=document.createElement("h4");//创建一个h4对象(提示框标题栏)

//定义h4的属性,即相当于

//

关闭

title.setAttribute("id", "msgTitle");

title.setAttribute("align", "left");

title.style.margin = "0";

title.style.padding = "3px";

title.style.background = bordercolor;

title.style.filter = "progid:DXImageTransform.Microsoft.Alpha(startX=20, startY=20, finishX=100, finishY=100,style=1,opacity=75,finishOpacity=100);";

title.style.opacity = "0.75";

title.style.border = "1px solid " + bordercolor;

title.style.height = "18px";

title.style.font = "12px Verdana, Geneva, Arial, Helvetica, sans-serif";

title.style.color = "white";

//title.style.cursor="pointer";

title.innerHTML = "错误提示";

//title.οnclick=this.removeObj;

var button=document.createElement("input");//创建一个input对象(提示框按钮)

//定义input的属性,即相当于

//

button.setAttribute("type","button");

button.setAttribute("value","关闭");

button.style.width="60px";

button.style.align="center";

button.style.marginLeft="0px";

button.style.marginBottom="0px";

button.style.background=bordercolor;

button.style.border="1px solid "+ bordercolor;

button.style.color="white";

button.οnclick=this.removeObj;

document.body.appendChild(msgObj);//在body内添加提示框div对象msgObj

document.getElementById("msgDiv").appendChild(title);//在提示框div中添加标题栏对象title

var txt = document.createElement("p");//创建一个p对象(提示框提示信息)

//定义p的属性,即相当于

//

测试效果

txt.style.margin = "1em 0"

txt.setAttribute("id", "msgTxt");

txt.innerHTML = str + "
";//来源于函数调用时的参数值

document.getElementById("msgDiv").appendChild(txt);//在提示框div中添加提示信息对象txt

document.getElementById("msgDiv").appendChild(button);//在提示框div中添加按钮对象button

}

this.removeObj = function() {//点击标题栏触发的事件

document.body.removeChild(bgObj);//删除背景层Div

document.getElementById("msgDiv").removeChild(title);//删除提示框的标题栏

document.body.removeChild(msgObj);//删除提示框层

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值