打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring Boot集成Swagger2并替换默认的UI

描述:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

原生UI界面:


Swagger原理:在项目启动的时候,spring会根据swagger的配置加载相关注解的controller,并生成对应的文档描述数据,该数据是json格式,通过路径:项目地址/ v2/api-docs可以访问到该数据,然后swaggerUI根据这份数据生成相应的文档描述界面。

因为我们能拿到这份数据,所以我们就可以生成自己的页面,网上有大神开发了一个比较人性化和美观并且开源的的页面如下:

https://git.oschina.net/xiaoym/swagger-bootstrap-ui

下载下来之后我们稍微改了下界面,并且加上了响应参数的描述如下:




主要是改了这个js文件:DApiUI.js


  1. package com.swagger.bootstrap.ui.demo.controller;  
  2.   
  3. import org.springframework.web.bind.annotation.GetMapping;  
  4. import org.springframework.web.bind.annotation.ModelAttribute;  
  5. import org.springframework.web.bind.annotation.PostMapping;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. import com.swagger.bootstrap.ui.demo.common.ParamBean1;  
  10. import com.swagger.bootstrap.ui.demo.common.ParamBean2;  
  11. import com.swagger.bootstrap.ui.demo.common.ParamBean3;  
  12. import com.swagger.bootstrap.ui.demo.common.ResponseBean1;  
  13. import com.swagger.bootstrap.ui.demo.common.ResponseBean2;  
  14. import com.swagger.bootstrap.ui.demo.common.ResponseBean3;  
  15. import com.swagger.bootstrap.ui.demo.common.RestMessage;  
  16.   
  17. import io.swagger.annotations.Api;  
  18. import io.swagger.annotations.ApiOperation;  
  19.   
  20. /*** 
  21.  * @author <a href="mailto:xiaoymin@foxmail.com">xiaoymin@foxmail.com</a> 
  22.  * 2017/04/20 14:01 
  23.  */  
  24. @Api(value="测试接口")  
  25. @RestController  
  26. @RequestMapping("/api/test")  
  27. public class TestController {  
  28.       
  29.     @ApiOperation(value = "测试接口1",notes = "测试说明1")  
  30.     @GetMapping(value = "/test1")  
  31.     public RestMessage<ResponseBean1> test1(@ModelAttribute ParamBean1 paramBean1){  
  32.         return new RestMessage<ResponseBean1>(paramBean1);  
  33.     }  
  34.   
  35.     @ApiOperation(value = "测试接口2",notes = "测试说明2")  
  36.     @PostMapping(value = "/test2")  
  37.     public RestMessage<ResponseBean2> test2(@ModelAttribute ParamBean2 paramBean2){  
  38.         return new RestMessage<ResponseBean2>(paramBean2);  
  39.     }  
  40.       
  41.     @ApiOperation(value = "测试接口3",notes = "测试说明3")  
  42.     @GetMapping(value = "/test3")  
  43.     public RestMessage<ResponseBean3> test3(@ModelAttribute ParamBean3 paramBean3){  
  44.         return new RestMessage<ResponseBean3>(paramBean3);  
  45.     }  
  46.       
  47. }  

  1. package com.swagger.bootstrap.ui.demo.common;  
  2.   
  3. import io.swagger.annotations.ApiModel;  
  4. import io.swagger.annotations.ApiModelProperty;  
  5.   
  6. @ApiModel(value="ParamBean1", description="ParamBean1 desc")  
  7. public class ParamBean1 {  
  8.   
  9.     @ApiModelProperty(value="id编号",name="id")  
  10.     private String id;  
  11.     @ApiModelProperty(value="名称",name="name")  
  12.     private String name;  
  13.     @ApiModelProperty(value="年龄",name="age")  
  14.     private String age;  
  15.       
  16.     public ParamBean1(){  
  17.           
  18.     }  
  19.       
  20.     public ParamBean1(String id, String name, String age, ResponseBean1 childBean){  
  21.         this.id = id;  
  22.         this.name = name;  
  23.         this.age = age;  
  24.     }  
  25.       
  26.     public String getId() {  
  27.         return id;  
  28.     }  
  29.     public void setId(String id) {  
  30.         this.id = id;  
  31.     }  
  32.     public String getName() {  
  33.         return name;  
  34.     }  
  35.     public void setName(String name) {  
  36.         this.name = name;  
  37.     }  
  38.     public String getAge() {  
  39.         return age;  
  40.     }  
  41.     public void setAge(String age) {  
  42.         this.age = age;  
  43.     }  
  44. }  

  1. package com.swagger.bootstrap.ui.demo.common;  
  2.   
  3. import io.swagger.annotations.ApiModel;  
  4. import io.swagger.annotations.ApiModelProperty;  
  5.   
  6. @ApiModel(value="ResponseBean1", description="ResponseBean1 desc")  
  7. public class ResponseBean1 {  
  8.   
  9.     @ApiModelProperty(value="编号1",name="id1")  
  10.     private String id1;  
  11.     @ApiModelProperty(value="性别1",name="sex1")  
  12.     private String sex1;  
  13.       
  14.     public ResponseBean1(){  
  15.           
  16.     }  
  17.   
  18.     public String getId1() {  
  19.         return id1;  
  20.     }  
  21.   
  22.     public void setId1(String id1) {  
  23.         this.id1 = id1;  
  24.     }  
  25.   
  26.     public String getSex1() {  
  27.         return sex1;  
  28.     }  
  29.   
  30.     public void setSex1(String sex1) {  
  31.         this.sex1 = sex1;  
  32.     }  
  33.       
  34. }  

  1. package com.swagger.bootstrap.ui.demo.common;  
  2.   
  3.   
  4. import java.io.Serializable;  
  5.   
  6. import io.swagger.annotations.ApiModel;  
  7. import io.swagger.annotations.ApiModelProperty;  
  8. import io.swagger.annotations.ApiParam;  
  9.   
  10. /*** 
  11.  * @author <a href="mailto:xiaoymin@foxmail.com">xiaoymin@foxmail.com</a> 
  12.  * @param <T> 
  13.  */  
  14. @ApiModel(value="RestMessage", description="RestMessage desc")  
  15. public class RestMessage<T> implements Serializable{  
  16.     private static final long serialVersionUID = 1L;  
  17.     private boolean success=true;  
  18.     private T data;  
  19.     @ApiParam(name="errorCode", value="aaa")  
  20.     private Integer errCode;  
  21.     @ApiModelProperty(value="message",notes="消息")  
  22.     private String message;  
  23.       
  24.   
  25.     public Integer getErrCode() {  
  26.         return errCode;  
  27.     }  
  28.   
  29.     public void setErrCode(Integer errCode) {  
  30.         this.errCode = errCode;  
  31.     }  
  32.   
  33.     public boolean isSuccess() {  
  34.         return success;  
  35.     }  
  36.   
  37.     public void setSuccess(boolean success) {  
  38.         this.success = success;  
  39.     }  
  40.   
  41.     public T getData() {  
  42.         return data;  
  43.     }  
  44.   
  45.     public void setData(T data) {  
  46.         this.data = data;  
  47.     }  
  48.   
  49.     public String getMessage() {  
  50.         return message;  
  51.     }  
  52.   
  53.     public void setMessage(String message) {  
  54.         this.message = message;  
  55.     }  
  56.   
  57.     public RestMessage() {  
  58.         super();  
  59.     }  
  60.   
  61.     public RestMessage(Object data) {  
  62.         super();  
  63.     }  
  64.   
  65.     public RestMessage(boolean success, Object data) {  
  66.         super();  
  67.         this.success = success;  
  68.     }  
  69.       
  70.   
  71. }  

[javascript] view plain copy
print?
  1. /** 
  2.  * Created by xiaoym on 2017/4/17. 
  3.  */  
  4.   
  5. (function ($) {  
  6.     //初始化类  
  7.     var DApiUI={};  
  8.     var apiData;  
  9.   
  10.     DApiUI.init=function () {  
  11.         $.ajax({  
  12.             url:"v2/api-docs",  
  13.             //url:"menu.json",  
  14.             dataType:"json",  
  15.             type:"get",  
  16.             async:false,  
  17.             success:function (data) {  
  18.                 //var menu=JSON.parse(data)  
  19.                 var menu=data;  
  20.                 DApiUI.definitions(menu);  
  21.                 DApiUI.log(menu);  
  22.                 DApiUI.createDescription(menu);  
  23.                 DApiUI.initTreeMenu(menu);  
  24.                 DApiUI.eachPath(menu);  
  25.                 apiData = menu;  
  26.             }  
  27.         })  
  28.     }  
  29.   
  30.     /*** 
  31.      * 创建面板 
  32.      */  
  33.     DApiUI.creatabTab=function () {  
  34.         var debug = apiData.info.license.name;  
  35.         var divcontent=$('<div id="myTab" class="tabs-container" style="width:95%;margin:0px auto;"></div>');  
  36.   
  37.         var ul=$('<ul class="nav nav-tabs"></ul>')  
  38.         var liapi=$('<li><a data-toggle="tab" href="#tab1" aria-expanded="false"> 接口说明</a></li>');  
  39.         ul.append(liapi);  
  40.         if(typeof (debug) != 'undefined' && debug != null && debug == "debug"){  
  41.             var lidebug=$('<li class=""><a data-toggle="tab" href="#tab2" aria-expanded="true"> 在线调试</a></li>');  
  42.             ul.append(lidebug);  
  43.         }  
  44.         var liResponse=$('<li><a data-toggle="tab" href="#tab3" aria-expanded="false"> 响应参数</a></li>');  
  45.         ul.append(liResponse);  
  46.         divcontent.append(ul);  
  47.   
  48.         var tabcontent=$('<div class="tab-content"></div>');  
  49.         var tab1content=$('<div id="tab1" class="tab-pane"><div class="panel-body"><strong>接口详细说明</strong><p>Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型。在你项目中的每个页面都要参照下面的格式进行设置。</p></div></div>');  
  50.         tabcontent.append(tab1content);  
  51.         var tab2content=$('<div id="tab2" class="tab-pane"><div class="panel-body"><strong>正在开发中,敬请期待......</strong></div></div>');  
  52.         tabcontent.append(tab2content);  
  53.         var tab3content=$('<div id="tab3" class="tab-pane"><div class="panel-body"><strong>响应参数</strong></div></div>');  
  54.         tabcontent.append(tab3content);  
  55.         divcontent.append(tabcontent);  
  56.   
  57.         //内容覆盖  
  58.         DApiUI.getDoc().html("");  
  59.         DApiUI.getDoc().append(divcontent);  
  60.         DApiUI.log("动态激活...")  
  61.         //liapi.addClass("active");  
  62.         DApiUI.log("动态激活12...")  
  63.         DApiUI.getDoc().find("#myTab a:first").tab('show')  
  64.         //$('#myTab a:first').tab('show')  
  65.   
  66.     }  
  67.   
  68.   
  69.     /*** 
  70.      * 创建简介table页面 
  71.      * @param menu 
  72.      */  
  73.     DApiUI.createDescription=function (menu) {  
  74.         var table=$('<table class="table table-hover table-bordered table-text-center"></table>');  
  75.         var thead=$('<thead><tr><th colspan="2" style="text-align:center">' + menu.info.title + '-前后端api接口文档</th></tr></thead>');  
  76.         table.append(thead);  
  77.         var tbody=$('<tbody></tbody>');  
  78.         var title=$('<tr><th class="active">项目名称</th><td style="text-align: left">'+menu.info.title+'</td></tr>');  
  79.         tbody.append(title);  
  80.         var description=$('<tr><th class="active">简介</th><td style="text-align: left">'+menu.info.description+'</td></tr>');  
  81.         tbody.append(description);  
  82.         var author=$('<tr><th class="active">作者</th><td style="text-align: left">'+menu.info.contact.name+'</td></tr>')  
  83.         tbody.append(author);  
  84.         var version=$('<tr><th class="active">版本</th><td style="text-align: left">'+menu.info.version+'</td></tr>')  
  85.         tbody.append(version);  
  86.         var host=$('<tr><th class="active">host</th><td style="text-align: left">'+menu.host+'</td></tr>')  
  87.         tbody.append(host)  
  88.         var service=$('<tr><th class="active">服务url</th><td style="text-align: left">'+menu.info.termsOfService+'</td></tr>')  
  89.         tbody.append(service);  
  90.         table.append(tbody);  
  91.   
  92.         var div=$('<div  style="width:95%;margin:0px auto;"></div>')  
  93.         div.append(table);  
  94.         //内容覆盖  
  95.         DApiUI.getDoc().html("");  
  96.         DApiUI.getDoc().append(div);  
  97.         DApiUI.getDoc().data("data",menu);  
  98.     }  
  99.   
  100.     /*** 
  101.      * 初始化菜单树 
  102.      * @param menu 
  103.      */  
  104.     DApiUI.initTreeMenu=function (menu) {  
  105.         //遍历tags  
  106.         var tags=new Array();  
  107.         //简介li  
  108.         var dli=$('<li  class="active"><a href="javascript:void(0)"><i class="icon-text-width"></i><span class="menu-text"> 简介 </span></a></li>')  
  109.         dli.on("click",function () {  
  110.             DApiUI.log("简介click")  
  111.             DApiUI.createDescription(menu);  
  112.             dli.addClass("active");  
  113.         })  
  114.         DApiUI.getMenu().html("");  
  115.         DApiUI.getMenu().append(dli);  
  116.         var methodApis=DApiUI.eachPath(menu);  
  117.   
  118.         $.each(menu.tags,function (i, tag) {  
  119.             var tagInfo=new TagInfo(tag.name,tag.description);  
  120.             //查找childrens  
  121.             $.each(methodApis,function (i, methodApi) {  
  122.                 //判断tags是否相同  
  123.                 if(methodApi.tag==tagInfo.name){  
  124.                     tagInfo.childrens.push(methodApi);  
  125.                 }  
  126.             })  
  127.             var len=tagInfo.childrens.length;  
  128.             if(len==0){  
  129.                 var li=$('<li ><a href="javascript:void(0)"><i class="icon-text-width"></i><span class="menu-text"> '+tagInfo.name+' </span></a></li>');  
  130.                 DApiUI.getMenu().append(li);  
  131.             }else{  
  132.                 //存在子标签  
  133.                 var li=$('<li></li>');  
  134.                 var titleA=$('<a href="#" class="dropdown-toggle"><i class="icon-file-alt"></i><span class="menu-text">'+tagInfo.name+'<span class="badge badge-primary ">'+len+'</span></span></a>');  
  135.                 li.append(titleA);  
  136.                 //循环树  
  137.                 var ul=$('<ul class="submenu"></ul>')  
  138.                 $.each(tagInfo.childrens,function (i, children) {  
  139.                     var childrenLi=$('<li class="menuLi"></li>');  
  140.                     var childrenA=$('<a href="javascript:void(0)"><i class="icon-double-angle-right"></i>'+children.summary+'</a>');  
  141.                     childrenLi.append(childrenA);  
  142.                     childrenLi.data("data",children);  
  143.                     ul.append(childrenLi);  
  144.                 })  
  145.                 li.append(ul);  
  146.                 DApiUI.getMenu().append(li);  
  147.             }  
  148.         })  
  149.         DApiUI.log("菜单初始化完成...")  
  150.         DApiUI.initLiClick();  
  151.     }  
  152.   
  153.     DApiUI.container=function (array, prop, value) {  
  154.         var temp;  
  155.         for(var i = 0; i < array.length; i++){  
  156.             var obj = array[i];  
  157.             if(obj.hasOwnProperty(prop) && obj[prop] == value){  
  158.                 temp = obj;  
  159.                 break;  
  160.             }  
  161.         }  
  162.         return temp;  
  163.     }  
  164.   
  165.     DApiUI.eachPath=function (menu) {  
  166.         var paths=menu.paths;  
  167.         DApiUI.log(paths);  
  168.         //paths是object对象,key是api接口地址,  
  169.         var methodApis=[];  
  170.         for(var key in paths){  
  171.             var obj=paths[key];  
  172.             //遍历obj,获取api接口访问方式  
  173.             //八中方式类型,直接判断  
  174.             var apiInfo = null;  
  175.             if(obj.hasOwnProperty("get")){  
  176.                 //get方式  
  177.                  apiInfo=new ApiInfo(obj["get"]);  
  178.                  apiInfo.methodType="get";  
  179.                  apiInfo.methodTypes = apiInfo.methodType;  
  180.                  apiInfo.url=key;  
  181.             }  
  182.   
  183.             if(obj.hasOwnProperty("post")){  
  184.                 if(typeof (apiInfo) == 'undefined' || apiInfo == null){  
  185.                     apiInfo=new ApiInfo(obj["post"]);  
  186.                     apiInfo.methodType="post";  
  187.                     apiInfo.methodTypes = apiInfo.methodType;  
  188.                     apiInfo.url=key;  
  189.                 } else {  
  190.                     apiInfo.methodTypes = apiInfo.methodTypes + ",post";  
  191.                 }  
  192.             }  
  193.               
  194.             if(obj.hasOwnProperty("put")){  
  195.                 if(typeof (apiInfo) == 'undefined' || apiInfo == null){  
  196.                     apiInfo=new ApiInfo(obj["put"]);  
  197.                     apiInfo.methodType="put";  
  198.                     apiInfo.methodTypes = apiInfo.methodType;  
  199.                     apiInfo.url=key;  
  200.                 } else {  
  201.                     apiInfo.methodTypes = apiInfo.methodTypes + ",put";  
  202.                 }  
  203.             }  
  204.               
  205.             if(obj.hasOwnProperty("delete")){  
  206.                 if(typeof (apiInfo) == 'undefined' || apiInfo == null){  
  207.                     apiInfo=new ApiInfo(obj["delete"]);  
  208.                     apiInfo.methodType="delete";  
  209.                     apiInfo.methodTypes = apiInfo.methodType;  
  210.                     apiInfo.url=key;  
  211.                 } else {  
  212.                     apiInfo.methodTypes = apiInfo.methodTypes + ",delete";  
  213.                 }  
  214.             }  
  215.             methodApis.push(apiInfo);  
  216.         }  
  217.         console.log(methodApis);  
  218.         return methodApis;  
  219.   
  220.     }  
  221.   
  222.     /*** 
  223.      * li标签click事件 
  224.      */  
  225.     DApiUI.initLiClick=function () {  
  226.         DApiUI.getMenu().find(".menuLi").bind("click",function (e) {  
  227.             e.preventDefault();  
  228.             var that=$(this);  
  229.             var data=that.data("data");  
  230.             DApiUI.log("Li标签click事件");  
  231.             DApiUI.log(data);  
  232.             //获取parent-Li的class属性值  
  233.             var parentLi=that.parent().parent();  
  234.             DApiUI.log(parentLi);  
  235.             var className=parentLi.prop("class");  
  236.             DApiUI.log(className)  
  237.             DApiUI.getMenu().find("li").removeClass("active");  
  238.             //parentLi.addClass("active");  
  239.             that.addClass("active");  
  240.             DApiUI.createApiInfoTable(data);  
  241.             DApiUI.createDebugTab(data);  
  242.             DApiUI.createResponseTab(data);  
  243.         })  
  244.     }  
  245.   
  246.     DApiUI.getStringValue=function (obj) {  
  247.         var str="";  
  248.         if(typeof (obj)!='undefined'&&obj!=null){  
  249.             str=obj.toString();  
  250.         }  
  251.         return str;  
  252.     }  
  253.       
  254.     DApiUI.createResponseTab=function (apiInfo) {  
  255.           
  256.         var table = $('<table class="table table-hover table-bordered table-text-center"></table>');  
  257.         var thead = $('<thead><tr><th colspan="2" style="text-align:center">接口响应</th></tr></thead>');  
  258.         table.append(thead);  
  259.         var tbody = $('<tbody></tbody>');  
  260.   
  261.         var summary = $('<tr><th class="active" style="text-align: right;width:10%;">接口名称</th><td style="text-align: left">'  
  262.                 + DApiUI.getStringValue(apiInfo.summary) + '</td></tr>');  
  263.         tbody.append(summary);  
  264.   
  265.         var description = $('<tr><th class="active" style="text-align: right;">接口描述</th><td style="text-align: left">'  
  266.                 + DApiUI.getStringValue(apiInfo.description) + '</td></tr>');  
  267.         tbody.append(description);  
  268.   
  269.         //请求参数  
  270.         var args = $('<tr><th class="active" style="text-align: right;">响应参数</th></tr>');  
  271.         //rowspan  
  272.         //判断是否有请求参数  
  273.          var resp=apiInfo.responses;  
  274.          if(resp.hasOwnProperty("200")){  
  275.            var ok=resp["200"];  
  276.            if(ok.hasOwnProperty("schema")){  
  277.               var schema=ok["schema"];  
  278.               var ref=schema["$ref"];  
  279.               var regex=new RegExp("#/definitions/(.*)$","ig");  
  280.               if(regex.test(ref)) {  
  281.                  var refType = RegExp.$1;  
  282.                  var definitionMap=DApiUI.getDoc().data("definitionMap");  
  283.                  if(definitionMap.hasOwnProperty(refType)){  
  284.                     var refObjct = definitionMap[refType];  
  285.                     DApiUI.log("hahahahah" + JSON.stringify(refObjct));  
  286.                     var refObjectPropLen = Object.getOwnPropertyNames(refObjct).length;  
  287.                     DApiUI.log(refObjectPropLen);  
  288.                     var ptd = $("<td></td>");  
  289.                     var ptable = $('<table class="table table-bordered"></table>')  
  290.                     var phead = $('<thead><th>SCHEMA</th><th>参数名称</th><th>参数类型</th><th>参数描述</th></thead>');  
  291.                     ptable.append(phead);  
  292.                     var pbody = $('<tbody></tbody>');  
  293.                     var refObjctArray = new Array();  
  294.                     for(var refProp in refObjct){  
  295.                         if(refProp=='objKey'){  
  296.                             continue;  
  297.                         }  
  298.                         var refObj = refObjct[refProp];  
  299.                         var type = "";  
  300.                         var desc = refProp;  
  301.                         if(typeof (refObj) != 'undefined' && refObj != null){  
  302.                             if(refObj.hasOwnProperty('type')){  
  303.                                 type = refObj.type;  
  304.                             } else if(refObj.hasOwnProperty('$ref')){  
  305.                                 var refModel = refObj.$ref;  
  306.                                 refModel = DApiUI.getDefinitionModel(refModel);  
  307.                                 type = 'ref => ' + refModel;  
  308.                                 if(definitionMap.hasOwnProperty(refModel)){  
  309.                                     var refModelObj = definitionMap[refModel];  
  310.                                     refObjctArray.push(refModelObj);  
  311.                                 }  
  312.                             }  
  313.                             if(refObj.hasOwnProperty('description')){  
  314.                                 desc = refObj.description;  
  315.                             }  
  316.                         }  
  317.                         var ptr = $('<tr><td>' + refProp + '</td><td>'  
  318.                                 + type + '</td><td>' + desc + '</td>');  
  319.                         pbody.append(ptr);  
  320.                     }  
  321.                     pbody.find('tr').first().prepend('<td rowspan="' + (refObjectPropLen-1) +'">' + refType + '</td>');  
  322.                     for(var i=0; i < refObjctArray.length; i++){  
  323.                         DApiUI.responsParam(pbody, refObjctArray[i]);  
  324.                     }  
  325.                     ptable.append(pbody);  
  326.                     ptd.append(ptable);  
  327.                     args.append(ptd);  
  328.                  }  
  329.               }  
  330.             }  
  331.          }  
  332.            
  333.         tbody.append(args);  
  334.         //响应数据结构  
  335.         var responseConstruct = $('<tr><th class="active" style="text-align: right;">响应示例</th></tr>');  
  336.         var responseConstructtd = $('<td  style="text-align: left"></td>')  
  337.         responseConstructtd.append(DApiUI.createResponseDefinition(apiInfo));  
  338.         responseConstruct.append(responseConstructtd);  
  339.   
  340.         tbody.append(responseConstruct)  
  341.   
  342.         //响应状态码  
  343.         //2017-05-05 yiyuanwei 修改响应状态说明  
  344.         var response = $('<tr><th class="active" style="text-align: right;">响应状态</th></tr>');  
  345.         if (typeof (apiInfo.responses) != 'undefined'  
  346.                 && apiInfo.responses != null) {  
  347.             var resp = apiInfo.responses;  
  348.             var ptd = $("<td></td>");  
  349.             var ptable = $('<table class="table table-bordered"></table>')  
  350.             //var phead = $('<thead><th>状态码</th><th>说明</th><th>schema</th></thead>');  
  351.             var phead = $('<thead><th>状态值</th><th>说明</th></thead>');  
  352.             ptable.append(phead);  
  353.             var pbody = $('<tbody></tbody>');  
  354. //          if (resp.hasOwnProperty("200")) {  
  355. //              var ptr = $('<tr><td>200</td><td>http响应成功</td><td></td></tr>');  
  356. //              pbody.append(ptr);  
  357. //          }  
  358.             pbody.append('<tr><td>sucess</td><td>http响应成功</td></tr>');  
  359.             pbody.append('<tr><td>fail</td><td>http响应失败</td></tr>');  
  360. //          //400  
  361. //          pbody.append($('<tr><td>400</td><td>Bad Request 请求出现语法错误,一般是请求参数不对</td><td></td></tr>'));  
  362. //          //404  
  363. //          pbody.append($('<tr><td>404</td><td>Not Found 无法找到指定位置的资源</td><td></td></tr>'));  
  364. //          //401  
  365. //          pbody.append($('<tr><td>401</td><td>Unauthorized 访问被拒绝</td><td></td></tr>'));  
  366. //          //403  
  367. //          pbody.append($('<tr><td>403</td><td>Forbidden 资源不可用</td><td></td></tr>'));  
  368. //          //500  
  369. //          pbody.append($('<tr><td>500</td><td>服务器内部错误,请联系Java后台开发人员!!!</td><td></td></tr>'));  
  370.             ptable.append(pbody);  
  371.             ptd.append(ptable);  
  372.             response.append(ptd);  
  373.         } else {  
  374.             response.append($("<td>暂无</td>"));  
  375.         }  
  376.         tbody.append(response);  
  377.         table.append(tbody);  
  378.   
  379.         //DApiUI.creatabTab();  
  380.         //内容覆盖  
  381.         //DApiUI.getDoc().html("");  
  382.         //查找接口doc  
  383.         DApiUI.getDoc().find("#tab3").find(".panel-body").html("")  
  384.         DApiUI.getDoc().find("#tab3").find(".panel-body").append(table);  
  385.         //DApiUI.getDoc().append(table);  
  386.     }  
  387.       
  388.     DApiUI.getDefinitionModel = function(dm){  
  389.         return dm.replace("#/definitions/","");  
  390.     }  
  391.       
  392.   
  393.     DApiUI.responsParam = function(pbody, refObjct) {  
  394.         var index = 0;  
  395.         var refObjctArray = new Array();  
  396.         for (var refProp in refObjct) {  
  397.             if(refProp=='objKey'){  
  398.                 continue;  
  399.             }  
  400.             var refObj = refObjct[refProp];  
  401.             var type = "";  
  402.             var desc = refProp;  
  403.             if (typeof (refObj) != 'undefined' && refObj != null) {  
  404.                 if (refObj.hasOwnProperty('type')) {  
  405.                     type = refObj.type;  
  406.                 } else if (refObj.hasOwnProperty('$ref')) {  
  407.                     var refModel = refObj.$ref;  
  408.                     refModel = DApiUI.getDefinitionModel(refModel);  
  409.                     type = 'ref => ' + refModel;  
  410.                     if(DApiUI.getDoc().data("definitionMap").hasOwnProperty(refModel)){  
  411.                         var refModelObj = DApiUI.getDoc().data("definitionMap")[refModel];  
  412.                         refObjctArray.push(refModelObj);  
  413.                     }  
  414.                 }  
  415.                 if (refObj.hasOwnProperty('description')) {  
  416.                     desc = refObj.description;  
  417.                 }  
  418.             }  
  419.             var ptr = $('<tr><td>' + refProp + '</td><td>' + type + '</td><td>'  
  420.                     + desc + '</td>');  
  421.             if(index == 0){  
  422.                 ptr.prepend('<td rowspan="' + (Object.getOwnPropertyNames(refObjct).length-1) + '">' + refObjct.objKey + '</td>');  
  423.             }  
  424.             pbody.append(ptr);  
  425.             index++;  
  426.         }  
  427.         for(var i=0; i < refObjctArray.length; i++){  
  428.             DApiUI.responsParam(pbody, refObjctArray[i]);  
  429.         }  
  430.     }  
  431.       
  432.       
  433.     /** 
  434.      * 创建调试面板 
  435.      */  
  436.     DApiUI.createDebugTab=function (apiInfo) {  
  437.         DApiUI.log("创建调试tab")  
  438.         //方法、请求类型、发送按钮  
  439.         var div=$('<div style="width: 100%;margin: 0px auto;margin-top: 20px;"></div>');  
  440.         var headdiv1=$('<div class="input-group m-bot15"><span class="input-group-btn"><button class="btn btn-default btn-info" type="button">'+DApiUI.getStringValue(apiInfo.methodType)+'</button></span><input type="text" id="txtreqUrl" class="form-control" value="'+DApiUI.getStringValue(apiInfo.url)+'"/><span class="input-group-btn"><button id="btnRequest" class="btn btn-default btn-primary" type="button"> 发 送 </button></span></div>');  
  441.         div.append(headdiv1);  
  442.   
  443.   
  444.         //请求参数  
  445.         var divp=$('<div class="panel panel-primary"><div class="panel-heading">请求参数</div></div>')  
  446.   
  447.         var divpbody=$('<div class="panel-body"></div>')  
  448.         //判断是否有请求参数  
  449.         if(typeof (apiInfo.parameters)!='undefined'&&apiInfo.parameters!=null){  
  450.             var table=$('<table class="table table-hover table-bordered table-text-center"></table>')  
  451.             var thead=$('<thead><tr><th></th><th>参数名称</th><th>参数值</th><th>操作</th></tr></thead>');  
  452.             table.append(thead);  
  453.             var tbody=$('<tbody id="paramBody"></tbody>');  
  454.             $.each(apiInfo.parameters,function (i, param) {  
  455.                 var tr=$('<tr></tr>');  
  456.                 tr.data("data",param);  
  457.                 var checkbox=$('<td><div class="checkbox"><label><input type="checkbox" value="" checked></label></div></td>');  
  458.                 var key=$('<td><input class="form-control p-key" value="'+param.name+'"/></td>')  
  459.                 var value=$('<td><input class="form-control p-value" data-apiUrl="'+apiInfo.url+'" data-name="'+param.name+'" placeholder="'+DApiUI.getStringValue(param['description'])+'"/></td>');  
  460.                 var oper=$('<td><button class="btn btn-danger btn-circle btn-lg" type="button"><strong>×</strong></button></td>');  
  461.                 //删除事件  
  462.                 oper.find("button").on("click",function (e) {  
  463.                     e.preventDefault();  
  464.                     var that=$(this);  
  465.                     that.parent().parent().remove();  
  466.                 })  
  467.                 //判断参数类型,针对path参数  
  468.                 if(param["in"]=="path"){  
  469.                     //赋予change事件  
  470.                     value.find("input").on("keyup",function () {  
  471.                         var t=$(this);  
  472.                         var name=t.data("name");  
  473.                         var apiUrl=t.attr("data-apiUrl");  
  474.                         var realValue=apiUrl.replace("{"+name+"}",t.val());  
  475.                         //查找是否还存在其他path参数  
  476.                         $("#paramBody").find("tr").each(function (i, itr) {  
  477.                             var itrthat=$(this);  
  478.                             var itrdata=itrthat.data("data");  
  479.                             var itrname=itrdata["name"];  
  480.                             if(itrdata["in"]=="path"&&itrdata["name"]!=name){  
  481.                                 //查找value值  
  482.                                 var itrtdvalue=itrthat.find(".p-value").val();  
  483.                                 if(itrtdvalue!=""){  
  484.                                     realValue=realValue.replace("{"+itrname+"}",itrtdvalue);  
  485.                                 }  
  486.                             }  
  487.                         })  
  488.                         DApiUI.log(realValue);  
  489.                         $("#txtreqUrl").val(realValue);  
  490.                         DApiUI.log("keyup。。。。")  
  491.                     })  
  492.   
  493.                 }  
  494.                 tr.append(checkbox).append(key).append(value).append(oper);  
  495.                 tbody.append(tr);  
  496.             })  
  497.             table.append(tbody);  
  498.             divpbody.append(table);  
  499.         }else{  
  500.             divpbody.append($('<strong>暂无参数</strong>'))  
  501.         }  
  502.         divp.append(divpbody);  
  503.   
  504.   
  505.         div.append(divp);  
  506.   
  507.         //创建reesponsebody  
  508.         var respcleanDiv=$('<div id="responsebody"></div>');  
  509.         div.append(respcleanDiv);  
  510.   
  511.         DApiUI.getDoc().find("#tab2").find(".panel-body").html("")  
  512.         DApiUI.getDoc().find("#tab2").find(".panel-body").append(div);  
  513.   
  514.   
  515.   
  516.   
  517.         //发送事件  
  518.         headdiv1.find("#btnRequest").bind("click",function (e) {  
  519.             e.preventDefault();  
  520.             respcleanDiv.html("")  
  521.             DApiUI.log("发送请求");  
  522.             //  
  523.             var params={};  
  524.   
  525.             //获取参数  
  526.             var paramBody=DApiUI.getDoc().find("#tab2").find("#paramBody")  
  527.             DApiUI.log("paramsbody..")  
  528.             DApiUI.log(paramBody)  
  529.             //组装请求url  
  530.             var url=DApiUI.getStringValue(apiInfo.url);  
  531.             var cacheData=DApiUI.getDoc().data("data");  
  532.             if(typeof (cacheData.basePath)!="undefined"&&cacheData.basePath!=""){  
  533.                 if(cacheData.basePath!="/"){  
  534.                     DApiUI.log("NOT ROOT PATH:");  
  535.                     url=cacheData.basePath+DApiUI.getStringValue(apiInfo.url);  
  536.                 }  
  537.             }  
  538.   
  539.   
  540.             paramBody.find("tr").each(function () {  
  541.                 var paramtr=$(this);  
  542.                 var cked=paramtr.find("td:first").find(":checked").prop("checked");  
  543.                 DApiUI.log(cked)  
  544.                 if (cked){  
  545.                     var trdata=paramtr.data("data");  
  546.                     //获取key  
  547.                     //var key=paramtr.find("td:eq(1)").find("input").val();  
  548.                     var key=trdata["name"];  
  549.                     //获取value  
  550.                     var value=paramtr.find("td:eq(2)").find("input").val();  
  551.                     if(trdata["in"]=="path"){  
  552.                         url=url.replace("{"+key+"}",value);  
  553.                     }else{  
  554.                         params[key]=value;  
  555.                     }  
  556.                     DApiUI.log("key:"+key+",value:"+value);  
  557.                 }  
  558.             })  
  559.             DApiUI.log("获取参数..")  
  560.             DApiUI.log(params);  
  561.             DApiUI.log(apiInfo)  
  562.   
  563.             DApiUI.log("请求url:"+url);  
  564.             $.ajax({  
  565.                 url:url,  
  566.                 type:DApiUI.getStringValue(apiInfo.methodType),  
  567.                 data:params,  
  568.                 success:function (data,status,xhr) {  
  569.                     var resptab=$('<div id="resptab" class="tabs-container" ></div>')  
  570.                     var ulresp=$('<ul class="nav nav-tabs">' +  
  571.                         '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li>' +  
  572.                         '<li class=""><a data-toggle="tab" href="#tabcookie" aria-expanded="true"> Cookies</a></li>' +  
  573.                         '<li class=""><a data-toggle="tab" href="#tabheader" aria-expanded="true"> Headers </a></li></ul>')  
  574.   
  575.                     resptab.append(ulresp);  
  576.                     var respcontent=$('<div class="tab-content"></div>');  
  577.   
  578.                     var resp1=$('<div id="tabresp" class="tab-pane active"><div class="panel-body"><pre></pre></div></div>');  
  579.                     var resp2=$('<div id="tabcookie" class="tab-pane active"><div class="panel-body">暂无</div>');  
  580.                     var resp3=$('<div id="tabheader" class="tab-pane active"><div class="panel-body">暂无</div></div>');  
  581.   
  582.                     respcontent.append(resp1).append(resp2).append(resp3);  
  583.   
  584.                     resptab.append(respcontent)  
  585.   
  586.                     respcleanDiv.append(resptab);  
  587.                     DApiUI.log(xhr);  
  588.                     DApiUI.log(xhr.getAllResponseHeaders());  
  589.                     var allheaders=xhr.getAllResponseHeaders();  
  590.                     if(allheaders!=null&&typeof (allheaders)!='undefined'&&allheaders!=""){  
  591.                         var headers=allheaders.split("\r\n");  
  592.                         var headertable=$('<table class="table table-hover table-bordered table-text-center"><tr><th>请求头</th><th>value</th></tr></table>');  
  593.                         for(var i=0;i<headers.length;i++){  
  594.                             var header=headers[i];  
  595.                             if(header!=null&&header!=""){  
  596.                                 var headerValu=header.split(":");  
  597.                                 var headertr=$('<tr><th class="active">'+headerValu[0]+'</th><td>'+headerValu[1]+'</td></tr>');  
  598.                                 headertable.append(headertr);  
  599.                             }  
  600.                         }  
  601.                         //设置Headers内容  
  602.                         resp3.find(".panel-body").html("")  
  603.                         resp3.find(".panel-body").append(headertable);  
  604.                     }  
  605.                     var contentType=xhr.getResponseHeader("Content-Type");  
  606.                     DApiUI.log("Content-Type:"+contentType);  
  607.                     DApiUI.log(xhr.hasOwnProperty("responseJSON"))  
  608.                     if (xhr.hasOwnProperty("responseJSON")){  
  609.                         //如果存在该对象,服务端返回为json格式  
  610.                         resp1.find(".panel-body").html("")  
  611.                         DApiUI.log(xhr["responseJSON"])  
  612.                         var pre=$('<pre></pre>')  
  613.                         var jsondiv=$('<div></div>')  
  614.                         jsondiv.JSONView(xhr["responseJSON"]);  
  615.                         pre.html(JSON.stringify(xhr["responseJSON"],null,2));  
  616.                         resp1.find(".panel-body").append(jsondiv);  
  617.                     }else{  
  618.                         //判断content-type  
  619.                         //如果是image资源  
  620.                         var regex=new RegExp('image/(jpeg|jpg|png|gif)','g');  
  621.                         if(regex.test(contentType)){  
  622.                             var d=DApiUI.getDoc().data("data");  
  623.                             var imgUrl="http://"+d.host+apiInfo.url;  
  624.                             var img = document.createElement("img");  
  625.                             img.onload = function(e) {  
  626.                                 window.URL.revokeObjectURL(img.src); // 清除释放  
  627.                             };  
  628.                             img.src = imgUrl;  
  629.                             resp1.find(".panel-body").html("")  
  630.                             resp1.find(".panel-body")[0].appendChild(img);  
  631.                         }else{  
  632.                             //判断是否是text  
  633.                             var regex=new RegExp('.*?text.*','g');  
  634.                             if(regex.test(contentType)){  
  635.                                 resp1.find(".panel-body").html("")  
  636.                                 resp1.find(".panel-body").html(xhr.responseText);  
  637.                             }  
  638.                         }  
  639.   
  640.                     }  
  641.   
  642.                     DApiUI.log("tab show...")  
  643.                     resptab.find("a:first").tab("show");  
  644.                 },  
  645.                 error:function (xhr, textStatus, errorThrown) {  
  646.                     DApiUI.log("error.....")  
  647.                     DApiUI.log(xhr);  
  648.                     DApiUI.log(textStatus);  
  649.                     DApiUI.log(errorThrown);  
  650.                     var resptab=$('<div id="resptab" class="tabs-container" ></div>')  
  651.                     var ulresp=$('<ul class="nav nav-tabs">' +  
  652.                         '<li class=""><a data-toggle="tab" href="#tabresp" aria-expanded="false"> 响应内容 </a></li>' +  
  653.                         '<li class=""><a data-toggle="tab" href="#tabcookie" aria-expanded="true"> Cookies</a></li>' +  
  654.                         '<li class=""><a data-toggle="tab" href="#tabheader" aria-expanded="true"> Headers </a></li></ul>')  
  655.   
  656.                     resptab.append(ulresp);  
  657.                     var respcontent=$('<div class="tab-content"></div>');  
  658.   
  659.                     var resp1=$('<div id="tabresp" class="tab-pane active"><div class="panel-body"><pre></pre></div></div>');  
  660.                     var resp2=$('<div id="tabcookie" class="tab-pane active"><div class="panel-body">暂无</div>');  
  661.                     var resp3=$('<div id="tabheader" class="tab-pane active"><div class="panel-body">暂无</div></div>');  
  662.   
  663.                     respcontent.append(resp1).append(resp2).append(resp3);  
  664.   
  665.                     resptab.append(respcontent)  
  666.   
  667.                     respcleanDiv.append(resptab);  
  668.                     DApiUI.log(xhr);  
  669.                     DApiUI.log(xhr.getAllResponseHeaders());  
  670.                     var allheaders=xhr.getAllResponseHeaders();  
  671.                     if(allheaders!=null&&typeof (allheaders)!='undefined'&&allheaders!=""){  
  672.                         var headers=allheaders.split("\r\n");  
  673.                         var headertable=$('<table class="table table-hover table-bordered table-text-center"><tr><th>请求头</th><th>value</th></tr></table>');  
  674.                         for(var i=0;i<headers.length;i++){  
  675.                             var header=headers[i];  
  676.                             if(header!=null&&header!=""){  
  677.                                 var headerValu=header.split(":");  
  678.                                 var headertr=$('<tr><th class="active">'+headerValu[0]+'</th><td>'+headerValu[1]+'</td></tr>');  
  679.                                 headertable.append(headertr);  
  680.                             }  
  681.                         }  
  682.                         //设置Headers内容  
  683.                         resp3.find(".panel-body").html("")  
  684.                         resp3.find(".panel-body").append(headertable);  
  685.                     }  
  686.                     var contentType=xhr.getResponseHeader("Content-Type");  
  687.                     DApiUI.log("Content-Type:"+contentType);  
  688.                     var jsonRegex="";  
  689.                     DApiUI.log(xhr.hasOwnProperty("responseJSON"))  
  690.                     if (xhr.hasOwnProperty("responseJSON")){  
  691.                         //如果存在该对象,服务端返回为json格式  
  692.                         resp1.find(".panel-body").html("")  
  693.                         DApiUI.log(xhr["responseJSON"])  
  694.                         var jsondiv=$('<div></div>')  
  695.                         jsondiv.JSONView(xhr["responseJSON"]);  
  696.                         resp1.find(".panel-body").append(jsondiv);  
  697.                     }else{  
  698.                         //判断是否是text  
  699.                         var regex=new RegExp('.*?text.*','g');  
  700.                         if(regex.test(contentType)){  
  701.                             resp1.find(".panel-body").html("")  
  702.                             resp1.find(".panel-body").html(xhr.responseText);  
  703.                         }  
  704.                     }  
  705.                     DApiUI.log("tab show...")  
  706.                     resptab.find("a:first").tab("show");  
  707.   
  708.                 }  
  709.             })  
  710.         })  
  711.   
  712.     }  
  713.   
  714.     DApiUI.createDebugResponseTab=function (parent, data) {  
  715.   
  716.     }  
  717.       
  718.       
  719.     DApiUI.writeUTF8=function (str, isGetBytes) {  
  720.         var back = [],  
  721.             byteSize = 0;  
  722.         for (var i = 0; i < str.length; i++) {  
  723.             var code = str.charCodeAt(i);  
  724.             if (code >= 0 && code <= 127) {  
  725.                 byteSize += 1;  
  726.                 back.push(code);  
  727.             } else if (code >= 128 && code <= 2047) {  
  728.                 byteSize += 2;  
  729.                 back.push((192 | (31 & (code >> 6))));  
  730.                 back.push((128 | (63 & code)))  
  731.             } else if (code >= 2048 && code <= 65535) {  
  732.                 byteSize += 3;  
  733.                 back.push((224 | (15 & (code >> 12))));  
  734.                 back.push((128 | (63 & (code >> 6))));  
  735.                 back.push((128 | (63 & code)))  
  736.             }  
  737.         }  
  738.         for (i = 0; i < back.length; i++) {  
  739.             if (back[i] > 255) {  
  740.                 back[i] &= 255  
  741.             }  
  742.         }  
  743.         if (isGetBytes) {  
  744.             return back  
  745.         }  
  746.         if (byteSize <= 255) {  
  747.             return [0, byteSize].concat(back);  
  748.         } else {  
  749.             return [byteSize >> 8, byteSize & 255].concat(back);  
  750.         }  
  751.     }  
  752.   
  753.     DApiUI.createApiInfoTable=function (apiInfo) {  
  754.         var table=$('<table class="table table-hover table-bordered table-text-center"></table>');  
  755.         var thead=$('<thead><tr><th colspan="2" style="text-align:center">接口请求说明</th></tr></thead>');  
  756.         table.append(thead);  
  757.         var tbody=$('<tbody></tbody>');  
  758.   
  759.         var url=$('<tr><th class="active" style="text-align: right;">接口URL</th><td style="text-align: left"><code>http://'+ apiData.host+'/api/v1'+apiData.basePath+DApiUI.getStringValue(apiInfo.url)+'</code></td></tr>');  
  760.         tbody.append(url);  
  761.   
  762.         var summary=$('<tr><th class="active" style="text-align: right;">接口名称</th><td style="text-align: left">'+DApiUI.getStringValue(apiInfo.summary)+'</td></tr>');  
  763.         tbody.append(summary);  
  764.   
  765.   
  766.         var description=$('<tr><th class="active" style="text-align: right;">接口描述</th><td style="text-align: left">'+DApiUI.getStringValue(apiInfo.description)+'</td></tr>');  
  767.         tbody.append(description);  
  768.   
  769.         var methodType=$('<tr><th class="active" style="text-align: right;">请求方式</th><td style="text-align: left"><code>'+DApiUI.getStringValue(apiInfo.methodTypes)+'</code></td></tr>');  
  770.         tbody.append(methodType);  
  771.   
  772.   
  773.         var consumes=$('<tr><th class="active" style="text-align: right;">consumes</th><td style="text-align: left"><code>'+apiInfo.consumes.join(",")+'</code></td></tr>');  
  774.         tbody.append(consumes);  
  775.   
  776.         var produces=$('<tr><th class="active" style="text-align: right;">produces</th><td style="text-align: left"><code>'+apiInfo.produces.join(",")+'</code></td></tr>');  
  777.         tbody.append(produces);  
  778.   
  779.         //请求参数  
  780.         var args=$('<tr><th class="active" style="text-align: right;">请求参数</th></tr>');  
  781.         //判断是否有请求参数  
  782.         if(typeof (apiInfo.parameters)!='undefined'&&apiInfo.parameters!=null){  
  783.             var ptd=$("<td></td>");  
  784.             var ptable=$('<table class="table table-bordered"></table>')  
  785.             var phead=$('<thead><th>SCHEMA</th><th>参数名称</th><th>参数类型</th><th>输入模式</th><th>是否必须</th><th>参数描述</th></thead>');  
  786.             ptable.append(phead);  
  787.             var pbody=$('<tbody></tbody>');  
  788.             var paramRefArray = [];  
  789.             $.each(apiInfo.parameters,function (i, param) {  
  790.                 //判断是否有type属性,如果有,则后端为实体类形参  
  791.                 var ptype="string";  
  792.                 if(param.hasOwnProperty("type")){  
  793.                     ptype=param["type"];  
  794.                     var ptr=$('<tr><td></td><td>'+param.name+'</td><td>'+ptype+'</td><td>'+DApiUI.getStringValue(param['in'])+'</td><td>'+param['required']+'</td><td>'+DApiUI.getStringValue(param['description'])+'</td></tr>');  
  795.                     pbody.append(ptr);  
  796.                 }else{  
  797.                     ///判断是有schma  
  798.                     if(param.hasOwnProperty("schema")){  
  799.                         var schema=param["schema"];  
  800.                         //是否有type  
  801.                         if(schema.hasOwnProperty("type")){  
  802.                             ptype=schema["type"];  
  803.                         }  
  804. //                        if(schema.hasOwnProperty("$ref")){  
  805. //                          var refStr = schema['$ref'];  
  806. //                          refStr = DApiUI.getDefinitionModel(refStr);  
  807. //                          paramRefArray.push(DApiUI.getDoc().data("definitionMap")[refStr]);  
  808. //                        }  
  809.                     }  
  810.                 }  
  811.             })  
  812. //            for(var i = 0; i < paramRefArray.length; i++){  
  813. //              DApiUI.createRequestDefinition(pbody, paramRefArray[i])  
  814. //            }  
  815.             ptable.append(pbody);  
  816.             ptd.append(ptable);  
  817.             args.append(ptd);  
  818.         }else{  
  819.             args.append($('<td  style="text-align: left">暂无</td>'));  
  820.         }  
  821.         tbody.append(args);  
  822.           
  823.         table.append(tbody);  
  824.         DApiUI.creatabTab();  
  825.         //内容覆盖  
  826.         //DApiUI.getDoc().html("");  
  827.         //查找接口doc  
  828.         DApiUI.getDoc().find("#tab1").find(".panel-body").html("")  
  829.         DApiUI.getDoc().find("#tab1").find(".panel-body").append(table);  
  830.         //DApiUI.getDoc().append(table);  
  831.     }  
  832.       
  833.     DApiUI.createRequestDefinition=function (pbody, paramObj) {  
  834.         var index = 0;  
  835.         var refObjctArray = new Array();  
  836.         for (var refProp in paramObj) {  
  837.             if(refProp=='objKey'){  
  838.                 continue;  
  839.             }  
  840.             var refObj = paramObj[refProp];  
  841.             var type = "";  
  842.             var desc = refProp;  
  843.             if (typeof (refObj) != 'undefined' && refObj != null) {  
  844.                 if (refObj.hasOwnProperty('type')) {  
  845.                     type = refObj.type;  
  846.                 } else if (refObj.hasOwnProperty('$ref')) {  
  847.                     var refModel = refObj.$ref;  
  848.                     refModel = DApiUI.getDefinitionModel(refModel);  
  849.                     type = 'ref => ' + refModel;  
  850.                     if(DApiUI.getDoc().data("definitionMap").hasOwnProperty(refModel)){  
  851.                         var refModelObj = DApiUI.getDoc().data("definitionMap")[refModel];  
  852.                         refObjctArray.push(refModelObj);  
  853.                     }  
  854.                 }  
  855.                 if (refObj.hasOwnProperty('description')) {  
  856.                     desc = refObj.description;  
  857.                 }  
  858.             }  
  859.             var ptr=$('<tr><td>'+refProp+'</td><td>'+type+'</td><td>'+"path|body|url"+'</td><td>'+true+'</td><td>'+desc+'</td></tr>');  
  860.             if(index == 0){  
  861.                 ptr.prepend('<td rowspan="' + (Object.getOwnPropertyNames(paramObj).length-1) + '">' + paramObj.objKey + '</td>');  
  862.             }  
  863.             pbody.append(ptr);  
  864.             index++;  
  865.         }  
  866.         for(var i=0; i < refObjctArray.length; i++){  
  867.             DApiUI.createRequestDefinition(pbody, refObjctArray[i]);  
  868.         }  
  869.     }  
  870.       
  871.     DApiUI.createResponseDefinition=function (apiInfo) {  
  872.         var resp=apiInfo.responses;  
  873.         var div=$("<div class='panel'>暂无</div>")  
  874.         if(resp.hasOwnProperty("200")){  
  875.             var ok=resp["200"];  
  876.             if(ok.hasOwnProperty("schema")){  
  877.                 var schema=ok["schema"];  
  878.                 var ref=schema["$ref"];  
  879.                 var refType = DApiUI.getDefinitionModel(ref);  
  880. //                var definitionsArray=DApiUI.getDoc().data("definitionsArray");  
  881. //                for(var i=0;i<definitionsArray.length;i++){  
  882. //                    var definition=definitionsArray[i];  
  883. //                    if(definition.key==refType){  
  884. //                        div.html("")  
  885. //                        div.JSONView(definition.value);  
  886. //                    }  
  887. //                }  
  888.                 var definitionMap=DApiUI.getDoc().data("definitionOldMap");  
  889.                 var resObj = definitionMap[refType];  
  890.                 div.html("")  
  891.                 div.JSONView(resObj);  
  892.             }  
  893.         }  
  894.         return div;  
  895.     }  
  896.   
  897.   
  898.   
  899.     DApiUI.definitions=function (menu) {  
  900.         var definitionsArray=new Array();  
  901.         var definitionMap = {};  
  902.         var definitionOldMap = {};  
  903.         DApiUI.log("definitionsArray....")  
  904.         if(menu!=null&&typeof (menu)!="undefined"&&menu.hasOwnProperty("definitions")){  
  905.             var definitions=menu["definitions"];  
  906.             for(var definition in definitions){  
  907.                 var defiType=new definitionType();  
  908.                 defiType.key=definition;  
  909.                 //获取value  
  910.                 var value=definitions[definition];  
  911.                 if (checkUndefined(value)){  
  912.                     //是否有properties  
  913.                     if(value.hasOwnProperty("properties")){  
  914.                         var properties=value["properties"];  
  915.                         var defiTypeValue={};  
  916.                         var defiTypeValueMap={};  
  917.                         var defiTypeValueOldMap={};  
  918.                         for(var property in properties){  
  919.                             var propobj=properties[property];  
  920.                             //默认string类型  
  921.                             var propValue="";  
  922.                             //判断是否有类型  
  923.                             if(propobj.hasOwnProperty("type")){  
  924.                                 var type=propobj["type"];  
  925.                                 if(checkIsBasicType(type)){  
  926.                                     propValue=getBasicTypeValue(type);  
  927.                                 }else{  
  928.                                     if(type=="array"){  
  929.                                         propValue=new Array();  
  930.                                         var items=propobj["items"];  
  931.                                         var ref=items["$ref"];  
  932.                                         var regex=new RegExp("#/definitions/(.*)$","ig");  
  933.                                         if(regex.test(ref)){  
  934.                                             var refType=RegExp.$1;  
  935.                                             propValue.push(findRefDefinition(refType,definitions));  
  936.                                         }  
  937.                                     }  
  938.                                 }  
  939.   
  940.                             }else{  
  941.                                 if(propobj.hasOwnProperty("$ref")){  
  942.                                     var ref=propobj["$ref"];  
  943.                                     var regex=new RegExp("#/definitions/(.*)$","ig");  
  944.                                     if(regex.test(ref)) {  
  945.                                         var refType = RegExp.$1;  
  946.                                         propValue=findRefDefinition(refType,definitions);  
  947.                                     }  
  948.                                 }else{  
  949.                                     propValue={};  
  950.                                 }  
  951.                             }  
  952.                             propobj['propValue'] = propValue;  
  953.                             defiTypeValueOldMap[property]=propValue;  
  954.                             defiTypeValue[property]=propValue;  
  955.                             defiTypeValueMap['objKey'] = definition;  
  956.                             defiTypeValueMap[property]=propobj;  
  957.                         }  
  958.                         defiType.value=defiTypeValue;  
  959.                     }else{  
  960.                         defiType.value={};  
  961.                     }  
  962.                 }  
  963.                 definitionOldMap[definition]=defiTypeValueOldMap;  
  964.                 definitionMap[definition]=defiTypeValueMap;  
  965.                 definitionsArray.push(defiType);  
  966.             }  
  967.         }  
  968.         DApiUI.getDoc().data("definitionsArray",definitionsArray);  
  969.         //model 当key  
  970.         DApiUI.getDoc().data("definitionMap", definitionMap);  
  971.         DApiUI.getDoc().data("definitionOldMap", definitionOldMap);  
  972.     }  
  973.   
  974.     function checkIsBasicType(type) {  
  975.         var basicTypes=["string","integer","number","object","boolean"];  
  976.         var flag=false;  
  977.         if($.inArray(type,basicTypes)>-1){  
  978.             flag=true;  
  979.         }  
  980.         return flag;  
  981.     }  
  982.   
  983.     function getBasicTypeValue(type) {  
  984.         var propValue="";  
  985.         //是否是基本类型  
  986.         if(type=="integer"){  
  987.             propValue=0;  
  988.         }  
  989.         if(type=="boolean"){  
  990.             propValue=true;  
  991.         }  
  992.         if(type=="object"){  
  993.             propValue={};  
  994.         }  
  995.         if(type=="number"){  
  996.             propValue=parseFloat(0);  
  997.         }  
  998.         return propValue;  
  999.     }  
  1000.   
  1001.     function findRefDefinition(definitionName, definitions) {  
  1002.         var defaultValue="";  
  1003.         for(var definition in definitions){  
  1004.             if(definitionName==definition){  
  1005.                 var value=definitions[definition];  
  1006.                 //是否有properties  
  1007.                 if(value.hasOwnProperty("properties")){  
  1008.                     var properties=value["properties"];  
  1009.                     var defiTypeValue={};  
  1010.                     for(var property in properties){  
  1011.                         var propobj=properties[property];  
  1012.                         //默认string类型  
  1013.                         var propValue="";  
  1014.                         //判断是否有类型  
  1015.                         if(propobj.hasOwnProperty("type")){  
  1016.                             var type=propobj["type"];  
  1017.                             if(checkIsBasicType(type)){  
  1018.                                 propValue=getBasicTypeValue(type);  
  1019.                             }else{  
  1020.                                 if(type=="array"){  
  1021.                                     propValue=new Array();  
  1022.                                     var items=propobj["items"];  
  1023.                                     var ref=items["$ref"];  
  1024.                                     var regex=new RegExp("#/definitions/(.*)$","ig");  
  1025.                                     if(regex.test(ref)){  
  1026.                                         var refType=RegExp.$1;  
  1027.                                         propValue.push(findRefDefinition(refType,definitions));  
  1028.                                     }  
  1029.                                 }  
  1030.                             }  
  1031.   
  1032.                         }else if(propobj.hasOwnProperty("$ref")){  
  1033.                               
  1034.                         }  
  1035.                         defiTypeValue[property]=propValue;  
  1036.                     }  
  1037.                     defaultValue=defiTypeValue;  
  1038.                 }else{  
  1039.                     defaultValue={};  
  1040.                 }  
  1041.             }  
  1042.         }  
  1043.         return defaultValue;  
  1044.     }  
  1045.     function checkUndefined(obj) {  
  1046.         var flag=false;  
  1047.         if(obj!=null&&typeof (obj)!="undefined"){  
  1048.             flag=true;  
  1049.         }  
  1050.         return flag;  
  1051.     }  
  1052.   
  1053.   
  1054.     function definitionType() {  
  1055.         this.key="";  
  1056.         this.value={};  
  1057.     }  
  1058.   
  1059.   
  1060.     /*** 
  1061.      * 获取默认请求参数类型 
  1062.      * @param obj 
  1063.      * @returns {string} 
  1064.      */  
  1065.     DApiUI.getDefaultRequiredType=function (obj) {  
  1066.         var t="string";  
  1067.         if(typeof (obj)!='undefined'&&obj!=null){  
  1068.             t=obj.toString();  
  1069.         }  
  1070.         return  t;  
  1071.     }  
  1072.   
  1073.     /*** 
  1074.      * 查找子类 
  1075.      * @param tagInfo 
  1076.      * @param menu 
  1077.      */  
  1078.     DApiUI.initChildrens=function (tagInfo, menu) {  
  1079.   
  1080.     }  
  1081.   
  1082.     DApiUI.getDoc=function () {  
  1083.         return $("#content");  
  1084.     }  
  1085.     DApiUI.getMenu=function () {  
  1086.         return $("#menu");  
  1087.     }  
  1088.   
  1089.     DApiUI.log=function (msg) {  
  1090.         if (window.console){  
  1091.             console.log(msg);  
  1092.         }  
  1093.     }  
  1094.     DApiUI.init();  
  1095.   
  1096.   
  1097.     /*** 
  1098.      * 标签组信息 
  1099.      * @constructor 
  1100.      */  
  1101.     function TagInfo(name,description) {  
  1102.         this.name=name;  
  1103.         this.description=description;  
  1104.         this.childrens=new Array();  
  1105.     }  
  1106.   
  1107.   
  1108.     /*** 
  1109.      * api实体信息 
  1110.      * @param options 
  1111.      * @constructor 
  1112.      */  
  1113.     function ApiInfo(options) {  
  1114.         //判断options  
  1115.         this.tag="";  
  1116.         this.url="";  
  1117.         this.description="";  
  1118.         this.operationId="";  
  1119.         this.parameters=new Array();  
  1120.         this.produces=new Array();  
  1121.         this.responses={};  
  1122.         this.methodType="post";  
  1123.         this.consumes=new Array();  
  1124.         this.summary="";  
  1125.         if(options!=null&& typeof (options)!='undefined' ){  
  1126.             this.tag=options.tags[0];  
  1127.             this.description=options.description;  
  1128.             this.operationId=options.operationId;  
  1129.             this.summary=options.summary;  
  1130.             this.parameters=options.parameters;  
  1131.             this.produces=options.produces;  
  1132.             this.responses=options.responses;  
  1133.             this.consumes=options.consumes;  
  1134.         }  
  1135.     }  
  1136.       
  1137. })(jQuery)  



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.net Core WebApi中使用Swagger生成API文档简介
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Vue-Router 源码解析(五) router-link组件的用法及原理
AJAX+servlet实例入门
ASP.NET中防止页面多次提交的代码实现
ASP.NET Web API 使用Swagger生成在线帮助测试文档
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服