From 6362728bed22217d4427aa9c7588c57342d8feba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?= <806783409@qq.com> Date: Sat, 15 Dec 2018 16:53:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=AE=8C=E5=96=84=E5=92=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/dao/ZyplayerStorageMapper.java | 16 -- .../manage/dao/ZyplayerStorageMapper.xml | 16 -- .../manage/entity/ZyplayerStorage.java | 67 ------- .../manage/entity/ZyplayerStorageMapper.xml | 67 ------- .../service/manage/ZyplayerStorageMapper.java | 16 -- .../manage/ZyplayerStorageService.java | 16 -- .../manage/impl/ZyplayerStorageMapper.java | 20 -- .../impl/ZyplayerStorageServiceImpl.java | 20 -- .../framework/config/CustomizationBean.java | 43 +++-- .../config/MgStorageServiceImpl.java | 182 +++++++++--------- .../framework/filter/MgUiTestFilter.java | 148 +++++++------- .../src/main/resources/document.html | 10 +- .../webjars/mg-ui/js/mg-ui-cache-keys.js | 3 + .../webjars/mg-ui/js/mg-ui-export.js | 4 + .../main/resources/webjars/mg-ui/js/mg-ui.js | 79 ++------ .../main/resources/webjars/mg-ui/js/toast.js | 78 ++++---- 16 files changed, 257 insertions(+), 528 deletions(-) delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.java delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.xml delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorage.java delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorageMapper.xml delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageMapper.java delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageService.java delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageMapper.java delete mode 100644 zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageServiceImpl.java diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.java b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.java deleted file mode 100644 index 6ba8098c..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.mapper; - -import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -public interface ZyplayerStorageMapper extends BaseMapper { - -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.xml b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.xml deleted file mode 100644 index 6ba8098c..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/dao/ZyplayerStorageMapper.xml +++ /dev/null @@ -1,16 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.mapper; - -import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * Mapper 接口 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -public interface ZyplayerStorageMapper extends BaseMapper { - -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorage.java b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorage.java deleted file mode 100644 index 07efc9c6..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorage.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import java.util.Date; -import com.baomidou.mybatisplus.annotation.TableId; -import java.io.Serializable; - -/** - *

- * - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -public class ZyplayerStorage implements Serializable { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - private String docKey; - - private String docValue; - - private Date creationTime; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - public String getDocKey() { - return docKey; - } - - public void setDocKey(String docKey) { - this.docKey = docKey; - } - public String getDocValue() { - return docValue; - } - - public void setDocValue(String docValue) { - this.docValue = docValue; - } - public Date getCreationTime() { - return creationTime; - } - - public void setCreationTime(Date creationTime) { - this.creationTime = creationTime; - } - - @Override - public String toString() { - return "ZyplayerStorage{" + - "id=" + id + - ", docKey=" + docKey + - ", docValue=" + docValue + - ", creationTime=" + creationTime + - "}"; - } -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorageMapper.xml b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorageMapper.xml deleted file mode 100644 index 07efc9c6..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/repository/manage/entity/ZyplayerStorageMapper.xml +++ /dev/null @@ -1,67 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import java.util.Date; -import com.baomidou.mybatisplus.annotation.TableId; -import java.io.Serializable; - -/** - *

- * - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -public class ZyplayerStorage implements Serializable { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - private String docKey; - - private String docValue; - - private Date creationTime; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - public String getDocKey() { - return docKey; - } - - public void setDocKey(String docKey) { - this.docKey = docKey; - } - public String getDocValue() { - return docValue; - } - - public void setDocValue(String docValue) { - this.docValue = docValue; - } - public Date getCreationTime() { - return creationTime; - } - - public void setCreationTime(Date creationTime) { - this.creationTime = creationTime; - } - - @Override - public String toString() { - return "ZyplayerStorage{" + - "id=" + id + - ", docKey=" + docKey + - ", docValue=" + docValue + - ", creationTime=" + creationTime + - "}"; - } -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageMapper.java b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageMapper.java deleted file mode 100644 index 4c5d0d80..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.service; - -import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -public interface ZyplayerStorageService extends IService { - -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageService.java b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageService.java deleted file mode 100644 index 4c5d0d80..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/ZyplayerStorageService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.service; - -import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 服务类 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -public interface ZyplayerStorageService extends IService { - -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageMapper.java b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageMapper.java deleted file mode 100644 index 606b8cf7..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.service.impl; - -import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage; -import com.zyplayer.doc.manage.repository.support.plus.manage.mapper.ZyplayerStorageMapper; -import com.zyplayer.doc.manage.repository.support.plus.manage.service.ZyplayerStorageService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -@Service -public class ZyplayerStorageServiceImpl extends ServiceImpl implements ZyplayerStorageService { - -} diff --git a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageServiceImpl.java b/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageServiceImpl.java deleted file mode 100644 index 606b8cf7..00000000 --- a/zyplayer-doc-manage/src/main/com/zyplayer/doc/manage/service/manage/impl/ZyplayerStorageServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.zyplayer.doc.manage.repository.support.plus.manage.service.impl; - -import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage; -import com.zyplayer.doc.manage.repository.support.plus.manage.mapper.ZyplayerStorageMapper; -import com.zyplayer.doc.manage.repository.support.plus.manage.service.ZyplayerStorageService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 服务实现类 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ -@Service -public class ZyplayerStorageServiceImpl extends ServiceImpl implements ZyplayerStorageService { - -} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java index 72ea2104..68811c87 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java @@ -1,19 +1,24 @@ -package com.zyplayer.doc.manage.framework.config; - -import org.springframework.boot.web.server.ErrorPage; -import org.springframework.boot.web.server.WebServerFactoryCustomizer; -import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpStatus; - -@Configuration -public class CustomizationBean implements WebServerFactoryCustomizer { - - @Override - public void customize(ConfigurableServletWebServerFactory factory) { - factory.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, "/statics/common/403.html")); - factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/statics/common/404.html")); - factory.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/statics/common/500.html")); - } - -} +package com.zyplayer.doc.manage.framework.config; + +import org.springframework.boot.web.server.ErrorPage; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpStatus; + +/** + * 自定义错误页面 + * @author 暮光:城中城 + * @since 2018年11月11日 + */ +@Configuration +public class CustomizationBean implements WebServerFactoryCustomizer { + + @Override + public void customize(ConfigurableServletWebServerFactory factory) { + factory.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, "/statics/common/403.html")); + factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/statics/common/404.html")); + factory.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/statics/common/500.html")); + } + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java index 559117e6..f5d3690c 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java @@ -1,91 +1,91 @@ -package com.zyplayer.doc.manage.framework.config; - -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.zyplayer.doc.manage.repository.manage.entity.ZyplayerStorage; -import com.zyplayer.doc.manage.service.manage.ZyplayerStorageService; -import com.zyplayer.doc.swagger.framework.service.MgStorage; -import com.zyplayer.doc.swagger.framework.service.MgStorageService; - -/** - * 申明为@Service之后网页上才能使用存储能力,同时需要在@EnableSwagger2的地方添加@EnableSwaggerMgUi注解, - * 才能开启存储的接口
- * 开放存储能力的好处:
- * 所有网页的配置、调试值都可以存储到服务器的数据库中,便于团队所有人的调试,一人配置,所有人受益
- * 如果不开启的话,数据是存放在浏览器的localStorage中,每个人、每个浏览器都得配置一次才能使用
- * - * @author 暮光:城中城 - * @since 2018年8月19日 - */ -@Service -public class MgStorageServiceImpl implements MgStorageService { - - @Autowired - ZyplayerStorageService zyplayerStorageService; - - /** - * 使用数据库来存储,例: storageMapper.select(key); - */ - @Override - public String get(String key) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("doc_key", key); - ZyplayerStorage zyplayerStorage = zyplayerStorageService.getOne(wrapper); - if (zyplayerStorage == null) { - return null; - } - return zyplayerStorage.getDocValue(); - } - - @Override - public List like(String key, String value) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.like(StringUtils.isNotBlank(key), "doc_key", key); - wrapper.like(StringUtils.isNotBlank(value), "doc_value", value); - List storageList = zyplayerStorageService.list(wrapper); - if (storageList == null || storageList.isEmpty()) { - return Collections.emptyList(); - } - List resultList = storageList.stream().map(val -> { - return new MgStorage(val.getDocKey(), val.getDocValue()); - }).collect(Collectors.toList()); - return resultList; - } - - /** - * 使用数据库来存储,例: storageMapper.updateOrInsert(key, value); - */ - @Override - public void put(String key, String value) { - ZyplayerStorage entity = new ZyplayerStorage(); - entity.setDocValue(value); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq(true, "doc_key", key); - boolean update = zyplayerStorageService.update(entity, updateWrapper); - if (!update) { - entity = new ZyplayerStorage(); - entity.setDocValue(value); - entity.setDocKey(key); - zyplayerStorageService.save(entity); - } - } - - /** - * 删除一个key - */ - @Override - public void remove(String key) { - UpdateWrapper queryWrapper = new UpdateWrapper<>(); - queryWrapper.eq(true, "doc_key", key); - zyplayerStorageService.remove(queryWrapper); - } - -} +package com.zyplayer.doc.manage.framework.config; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.zyplayer.doc.manage.repository.manage.entity.ZyplayerStorage; +import com.zyplayer.doc.manage.service.manage.ZyplayerStorageService; +import com.zyplayer.doc.swagger.framework.service.MgStorage; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; + +/** + * 申明为@Service之后网页上才能使用存储能力,同时需要在@EnableSwagger2的地方添加@EnableSwaggerMgUi注解, + * 才能开启存储的接口
+ * 开放存储能力的好处:
+ * 所有网页的配置、调试值都可以存储到服务器的数据库中,便于团队所有人的调试,一人配置,所有人受益
+ * 如果不开启的话,数据是存放在浏览器的localStorage中,每个人、每个浏览器都得配置一次才能使用
+ * + * @author 暮光:城中城 + * @since 2018年8月19日 + */ +@Service +public class MgStorageServiceImpl implements MgStorageService { + + @Autowired + ZyplayerStorageService zyplayerStorageService; + + /** + * 使用数据库来存储,例: storageMapper.select(key); + */ + @Override + public String get(String key) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("doc_key", key); + ZyplayerStorage zyplayerStorage = zyplayerStorageService.getOne(wrapper); + if (zyplayerStorage == null) { + return null; + } + return zyplayerStorage.getDocValue(); + } + + @Override + public List like(String key, String value) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(key), "doc_key", key); + wrapper.like(StringUtils.isNotBlank(value), "doc_value", value); + List storageList = zyplayerStorageService.list(wrapper); + if (storageList == null || storageList.isEmpty()) { + return Collections.emptyList(); + } + List resultList = storageList.stream().map(val -> { + return new MgStorage(val.getDocKey(), val.getDocValue()); + }).collect(Collectors.toList()); + return resultList; + } + + /** + * 使用数据库来存储,例: storageMapper.updateOrInsert(key, value); + */ + @Override + public void put(String key, String value) { + ZyplayerStorage entity = new ZyplayerStorage(); + entity.setDocValue(value); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq(true, "doc_key", key); + boolean update = zyplayerStorageService.update(entity, updateWrapper); + if (!update) { + entity = new ZyplayerStorage(); + entity.setDocValue(value); + entity.setDocKey(key); + zyplayerStorageService.save(entity); + } + } + + /** + * 删除一个key + */ + @Override + public void remove(String key) { + UpdateWrapper queryWrapper = new UpdateWrapper<>(); + queryWrapper.eq("doc_key", key); + zyplayerStorageService.remove(queryWrapper); + } + +} diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java index 6bb26183..62594356 100644 --- a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java @@ -1,74 +1,74 @@ -package com.zyplayer.doc.swagger.framework.filter; - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.annotation.Autowired; - -import com.zyplayer.doc.swagger.framework.service.MgStorageService; - -/** - * 有需要此拦截器的请自行拷贝至自身项目,不再开启@Component
- * 判断是否是模拟请求,功能需求:
- * 很多时候后端定义好了接口,但还未实现,这时前端已经需要数据调试了,这时就需要用到这个过滤器了!
- * 在页面上先配置好模拟返回的数据,然后在url上加入参数:mgUiTestFlag=1
- * 例:http://192.168.0.249:8082/openApi/case/info?mgUiTestFlag=1
- * 本过滤器就直接返回了之前配置的模拟数据,而不用等到后端必须把接口实现之后才能调试,或者在前端写一大段测试数据。
- * - * 例:笔者的公司后端人较少,一个需求需要10个接口,需求分析完后首先就把接口、参数、返回值定义好,然后一个个的去实现。 - * 也许需要10天才能写完,但前端两天就写好了,急需数据看效果,这时就让他们自己去设置模拟值,加上参数自己测试好。 - * 而不是一味的催后台,把各种锅丢给后端,然后玩自己的去了,浪费各环节等待时间。 - */ -//@Component -public class MgUiTestFilter implements Filter { - - @Autowired(required = false) - private MgStorageService mgStorageService; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - - } - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String mockTestFlag = request.getParameter("mgUiTestFlag"); - if (!"1".equals(mockTestFlag)) { - chain.doFilter(request, response); - return; - } - // 如果是模拟请求则直接返回模拟值 - HttpServletRequest httpServletRequest = (HttpServletRequest) request; - String requestUrl = httpServletRequest.getRequestURI(); - String cacheResult = mgStorageService.get("p-simulation-response-" + requestUrl); - if (cacheResult != null) { - responseWrite(cacheResult, (HttpServletResponse) response); - } - } - - @Override - public void destroy() { - - } - - private static void responseWrite(String params, HttpServletResponse response) throws IOException { - response.setStatus(200); - // response.setContentType("application/json"); - // 模拟返回支持跨域访问,正式对接需要自己协调怎么处理跨域问题 - response.addHeader("Access-Control-Allow-Origin", "*"); - response.setContentType("text/html"); - response.setCharacterEncoding("UTF-8"); - response.setHeader("Cache-Control", "no-cache, must-revalidate"); - response.getWriter().write(params); - } - -} +package com.zyplayer.doc.swagger.framework.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.zyplayer.doc.swagger.framework.service.MgStorageService; + +/** + * 有需要此拦截器的请自行拷贝至自身项目,需要使过滤器生效,文档不再开启@Component
+ * 判断是否是模拟请求,功能需求:
+ * 很多时候后端定义好了接口,但还未实现,这时前端已经需要数据调试了,这时就需要用到这个过滤器了!
+ * 在页面上先配置好模拟返回的数据,然后在url上加入参数:mgUiTestFlag=1
+ * 例:http://192.168.0.249:8082/openApi/case/info?mgUiTestFlag=1
+ * 本过滤器就直接返回了之前配置的模拟数据,而不用等到后端必须把接口实现之后才能调试,或者在前端写一大段测试数据。
+ *

+ * 例:笔者的公司后端人较少,一个需求需要10个接口,需求分析完后首先就把接口、参数、返回值定义好,然后一个个的去实现。 + * 也许需要10天才能写完,但前端两天就写好了,急需数据看效果,这时就让他们自己去设置模拟值,加上参数自己测试好。 + * 而不是一味的催后台,把各种锅丢给后端,然后玩自己的去了,浪费各环节等待时间。 + */ +//@Component +public class MgUiTestFilter implements Filter { + + @Autowired + private MgStorageService mgStorageService; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + // 需要使用模拟值返回的标记 + String mockTestFlag = request.getParameter("mgUiTestFlag"); + if (!"1".equals(mockTestFlag)) { + // 未开启直接跳过 + chain.doFilter(request, response); + return; + } + // 如果是模拟请求则直接返回模拟值 + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String requestUrl = httpServletRequest.getRequestURI(); + // 文档页面存,这里取,就这么简单。。。 + // 存取位置和文档的一致,"p-simulation-response-" + requestUrl 不能修改,因为存就是这样存的 + String cacheResult = mgStorageService.get("p-simulation-response-" + requestUrl); + if (cacheResult != null) { + HttpServletResponse servletResponse = (HttpServletResponse) response; + servletResponse.setStatus(200); + // response.setContentType("application/json"); + // 模拟返回支持跨域访问,正式对接需要自己协调怎么处理跨域问题 + servletResponse.addHeader("Access-Control-Allow-Origin", "*"); + servletResponse.setContentType("text/html"); + servletResponse.setCharacterEncoding("UTF-8"); + servletResponse.setHeader("Cache-Control", "no-cache, must-revalidate"); + servletResponse.getWriter().write(cacheResult); + } + } + + @Override + public void destroy() { + + } + +} diff --git a/zyplayer-doc-swagger/src/main/resources/document.html b/zyplayer-doc-swagger/src/main/resources/document.html index ae5e2324..20925aea 100644 --- a/zyplayer-doc-swagger/src/main/resources/document.html +++ b/zyplayer-doc-swagger/src/main/resources/document.html @@ -297,13 +297,21 @@

+ + + + - + diff --git a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-cache-keys.js b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-cache-keys.js index 95b33d24..43a872cc 100644 --- a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-cache-keys.js +++ b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-cache-keys.js @@ -1,3 +1,6 @@ +/** + * 页面中所有使用到的缓存key必须定义在这里 + */ var cacheKeys = { userSettings: 'userSettings', swaggerResourcesList: 'swagger-resources-list', diff --git a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-export.js b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-export.js index d0bf1d04..71a0935e 100644 --- a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-export.js +++ b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui-export.js @@ -1,3 +1,7 @@ +/** + * 所有需要iframe页面调用的接口必须定义在这里 + * 通过getExport()来吊起父页面的这些接口 + */ var exports = { regeneratePathTree: function(){ // 定义在mg-ui.js,用于重新生成文档树目录 diff --git a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui.js b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui.js index b2926db3..a663915c 100644 --- a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui.js +++ b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/mg-ui.js @@ -1,8 +1,8 @@ /** - * zyplayer-doc-swagger是swagger-ui的一个前端实现,使用简单、解析速度快、走心的设计 + * zyplayer-doc-swagger是swagger的一个前端实现,使用简单、解析速度快、走心的设计 * 支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。 * 使用中您有任何的意见和建议都可到源码地址处反馈哦! - * git地址:https://gitee.com/zyplayer/zyplayer-doc-swagger + * git地址:https://gitee.com/zyplayer/zyplayer-doc * @author 暮光:城中城 * @since 2018年5月20日 */ @@ -35,20 +35,8 @@ var defaultUserSettings = { prevWNow : 360 }; -var swaggerApiDocsArr = []; - var requestParamObj = {}; -// 模板示例 -var requestParamObjTemp = { - taskId: { - value: 1,// 参数值 - paramType: 'string',// 参数类型,string int boolean - required: true,// 是否必填 - paramIn: 'body',// 参数位置,body query header - paramDesc: '参数说明' - } -}; - +// 文档管理的tables var rightContentTabs; /** @@ -169,6 +157,7 @@ $("#searchDocInput").keyup(function(e) { searchDoc(); } }); + /** * 搜索按钮点击 */ @@ -177,7 +166,7 @@ $("#searchDocBt").click(function(){ }); /** - * 导出文档 + * 导出文档-子页面调用-文档地址管理 */ function exportDocument(){ // 清空 @@ -195,6 +184,9 @@ function exportDocument(){ $('#exportDocumentModal').modal('ajustPosition', 'fit'); } +/** + * 确认导出 + */ $("#doExportBtn").click(function(){ var jsonStrAll = ""; var mgUiDataArr = "var mgUiDataArr = ["; @@ -268,22 +260,6 @@ $("#choiseDocBtn").click(function(){ $('#choiseDocModal').modal('hide'); }); -/** - * 增加文档的保存按钮 - */ -$("#addNewDocumentBtn").click(function(){ - var addNewDocumentInput = $("#addNewDocumentInput").val(); - if(isEmpty(addNewDocumentInput)) { - Toast.error("地址不可以为空");return; - } - projectLoadingIndex = 1; - ajaxTemp("swagger-mg-ui/document/addSwaggerResources", "post", "json", {resourcesUrl: addNewDocumentInput}, function(json){ - if(validateResult(json)) { - document.location.reload(); - } - }); -}); - /** * 主页li点击事件,展示主页 */ @@ -578,7 +554,10 @@ function searchDoc() { // } } -// 重新生成文档 +/** + * 重新生成文档 + */ + function regeneratePathTree(keywords){ projectTreeIdIndex = 1; treePathDataMap = new Map(); @@ -909,39 +888,7 @@ function documentLoadFinish() { globalLoadingMessager.hide(); }, 1000); $('#apiPathTree .projects').tree(); - $('#homePageDashboard').dashboard({draggable: false, - // 修改排序 - afterOrdered:function(newOrders){ - /*//console.log(newOrders); - var tempProjects = [], nowIndex = 0, settingTableIndex = 1; - Object.keys(newOrders).forEach(function(key){ - if(key == 1) { - settingTableIndex = newOrders[key]; - return; - } - var subCount = (newOrders[key] > settingTableIndex) ? 2 : 1; - tempProjects[newOrders[key] - subCount] = key; - }); - userSettings.projects = tempProjects; - storeUserSettings(); - */ - // 应该是控件问题,拖动之后单选项被值空了,需要重新设置选中,而且还必须等一会设置才有效果。。 - setTimeout("updateUserSettingsUi();", 500); - }, - // 修改大小 - onResize:function(){ - - }, - // 被移除 - afterPanelRemoved:function(id){ - //console.log(id); - ajaxTemp("swagger-mg-ui/document/deleteSwaggerDoc", "post", "json", {docUrl: id}, function(json){ - if(validateResult(json)) { - document.location.reload(); - } - }); - }, - }); + $('#homePageDashboard').dashboard({draggable: false}); } /** diff --git a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/toast.js b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/toast.js index 8de406a8..e826cb07 100644 --- a/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/toast.js +++ b/zyplayer-doc-swagger/src/main/resources/webjars/mg-ui/js/toast.js @@ -1,40 +1,40 @@ -/** - * 提示工具类 - * @author 暮光:城中城 - * @since 2017年5月7日 - */ -var Toast = { - notOpen:function(){ - var data = { - message:"该功能暂未开放,敬请期待!", - icon: 'exclamation-sign',type:"warning", - }; - this.show(data); - }, - success:function(msg, time){ - var data = { - message:msg,time:time, - icon: 'check-circle-o',type:'success', - }; - this.show(data); - }, - warn:function(msg, time){ - var data = { - message:msg,time:time, - icon: 'exclamation-sign',type:'warning', - }; - this.show(data); - }, - error:function(msg, time){ - var data = { - message:msg,time:time, - icon: 'exclamation-sign',type:'danger', - }; - this.show(data); - }, - show:function(data){ - data.time = isEmpty(data.time)?2000:data.time; - data.placement = isEmpty(data.placement)?'top':data.placement; - new $.zui.Messager(data.message, data).show(); - } +/** + * 提示工具类 + * @author 暮光:城中城 + * @since 2017年5月7日 + */ +var Toast = { + notOpen: function () { + var data = { + message: "该功能暂未开放,敬请期待!", + icon: 'exclamation-sign', type: "warning", + }; + this.show(data); + }, + success: function (msg, time) { + var data = { + message: msg, time: time, + icon: 'check-circle-o', type: 'success', + }; + this.show(data); + }, + warn: function (msg, time) { + var data = { + message: msg, time: time, + icon: 'exclamation-sign', type: 'warning', + }; + this.show(data); + }, + error: function (msg, time) { + var data = { + message: msg, time: time, + icon: 'exclamation-sign', type: 'danger', + }; + this.show(data); + }, + show: function (data) { + data.time = isEmpty(data.time) ? 2000 : data.time; + data.placement = isEmpty(data.placement) ? 'top' : data.placement; + new $.zui.Messager(data.message, data).show(); + } } \ No newline at end of file
功能说明 + 访问接口时增加参数:mgUiTestFlag=1,即可返回下面提交的模拟返回值
+ 需要被访问项目增加 MgUiTestFilter.java + 过滤器才能使用,里面逻辑很简单,一看就懂~ +
接口地址
测试地址 
返回内容