From 26b700fde30ea33cd4b52e2dbd0b29c3613de7b4 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: Mon, 12 Aug 2019 20:44:17 +0800 Subject: [PATCH] =?UTF-8?q?swagger=E6=94=AF=E6=8C=81json=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=BD=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zyplayer-doc-db/pom.xml | 5 ++ .../controller/EsDatasourceController.java | 4 +- .../config/impl/MgStorageServiceImpl.java | 2 +- zyplayer-doc-swagger/pom.xml | 5 ++ .../controller/MgDocumentController.java | 50 +++++++++++++++++-- .../controller/MgOpenDocController.java | 22 ++++++-- .../controller/MgProxyApiDocController.java | 46 +++++++++++++++++ .../swagger/framework/constant/Consts.java | 1 + .../framework/constant/StorageKeys.java | 2 + .../webjars/zpages/docUrlDetailConfig.html | 12 +++-- 10 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgProxyApiDocController.java diff --git a/zyplayer-doc-db/pom.xml b/zyplayer-doc-db/pom.xml index ce945c6b..f87f9ab4 100644 --- a/zyplayer-doc-db/pom.xml +++ b/zyplayer-doc-db/pom.xml @@ -41,6 +41,11 @@ org.springframework.boot spring-boot-starter-jta-atomikos + + net.sourceforge.jtds + jtds + 1.3.1 + org.mybatis mybatis diff --git a/zyplayer-doc-es/src/main/java/com/zyplayer/doc/elasticsearch/controller/EsDatasourceController.java b/zyplayer-doc-es/src/main/java/com/zyplayer/doc/elasticsearch/controller/EsDatasourceController.java index fadd8d63..c2bf7d16 100644 --- a/zyplayer-doc-es/src/main/java/com/zyplayer/doc/elasticsearch/controller/EsDatasourceController.java +++ b/zyplayer-doc-es/src/main/java/com/zyplayer/doc/elasticsearch/controller/EsDatasourceController.java @@ -24,7 +24,6 @@ import java.util.Optional; * @author 暮光:城中城 * @since 2019年7月27日 */ -@AuthMan("ES_DATASOURCE_MANAGE") @RestController @RequestMapping("/zyplayer-doc-es/datasource") public class EsDatasourceController { @@ -39,7 +38,8 @@ public class EsDatasourceController { List datasourceList = esDatasourceService.list(wrapper); return DocResponseJson.ok(datasourceList); } - + + @AuthMan("ES_DATASOURCE_MANAGE") @PostMapping(value = "/update") public ResponseJson update(EsDatasource esDatasource) { if (StringUtils.isBlank(esDatasource.getName())) { diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/impl/MgStorageServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/impl/MgStorageServiceImpl.java index eb0eb951..986c729c 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/impl/MgStorageServiceImpl.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/impl/MgStorageServiceImpl.java @@ -68,7 +68,7 @@ public class MgStorageServiceImpl implements MgStorageService { ZyplayerStorage entity = new ZyplayerStorage(); entity.setDocValue(value); UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq(true, "doc_key", key); + updateWrapper.eq("doc_key", key); boolean update = zyplayerStorageService.update(entity, updateWrapper); if (!update) { entity = new ZyplayerStorage(); diff --git a/zyplayer-doc-swagger/pom.xml b/zyplayer-doc-swagger/pom.xml index 4c01cb47..26830c62 100644 --- a/zyplayer-doc-swagger/pom.xml +++ b/zyplayer-doc-swagger/pom.xml @@ -45,6 +45,11 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-devtools + true + com.alibaba fastjson diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java index d15f4e76..4fa33a6e 100644 --- a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java @@ -11,15 +11,13 @@ import com.zyplayer.doc.swagger.controller.vo.SwaggerLocationVo; import com.zyplayer.doc.swagger.controller.vo.SwaggerResourcesInfoVo; import com.zyplayer.doc.swagger.framework.configuration.EnableDocSwagger; import com.zyplayer.doc.swagger.framework.configuration.SpringContextUtil; +import com.zyplayer.doc.swagger.framework.constant.Consts; import com.zyplayer.doc.swagger.framework.constant.StorageKeys; import com.zyplayer.doc.swagger.framework.service.MgStorageService; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import springfox.documentation.swagger.web.SwaggerResource; import javax.annotation.Resource; @@ -300,7 +298,12 @@ public class MgDocumentController { * @return 添加结果 */ @PostMapping(value = "/addSwaggerResources") - public ResponseJson addSwaggerResources(String resourcesUrl, String rewriteDomainUrl, String oldUrl, Integer openVisit) { + public ResponseJson addSwaggerResources(HttpServletRequest request, String swaggerJson, String resourcesUrl, String rewriteDomainUrl, String oldUrl, Integer openVisit) { + // 通过json文档内容来添加 + ResponseJson responseJson = this.addSwaggerJsonApiDocs(request, swaggerJson, resourcesUrl); + if (responseJson != null) { + return responseJson; + } // 总有些人喜欢填这个地址,那就替换来支持下吧 int htmlIndex = resourcesUrl.indexOf("/swagger-ui.html"); if (htmlIndex > 0) { @@ -352,6 +355,38 @@ public class MgDocumentController { return DocResponseJson.ok(); } + /** + * 增加json格式文档 + * + * @author 暮光:城中城 + * @since 2019年8月11日 + * @param swaggerJson swagger的文档内容 + * @return 添加结果 + */ + public ResponseJson addSwaggerJsonApiDocs(HttpServletRequest request, String swaggerJson, String resourcesUrl) { + if (StringUtils.isNotBlank(swaggerJson)) { + Integer nextId = 0; + String customUrl = resourcesUrl; + if (resourcesUrl.contains(Consts.PROXY_API_DOCS)) { + nextId = Integer.valueOf(resourcesUrl.substring(resourcesUrl.indexOf("?id=") + 4)); + } else { + nextId = storageService.getNextId(); + customUrl = request.getRequestURL().toString(); + customUrl = customUrl.substring(0, customUrl.lastIndexOf("/")); + customUrl = customUrl + Consts.PROXY_API_DOCS + "?id=" + nextId; + } + boolean addResult = this.addSwaggerLocationList(swaggerJson, null, customUrl, customUrl, 0); + if (addResult) { + storageService.put(StorageKeys.PROXY_API_DOCS + nextId, swaggerJson); + return DocResponseJson.ok(); + } + return DocResponseJson.warn("添加失败"); + } else if (resourcesUrl.contains(Consts.PROXY_API_DOCS)) { + return DocResponseJson.warn("添加失败,该地址是代理地址,必须填写文档内容"); + } + return null; + } + /** * 增加/swagger-resources地址 * @@ -403,6 +438,11 @@ public class MgDocumentController { String locationDel = this.encodeUrlParam(location); locationList = locationList.stream().filter(val -> !Objects.equals(val.getLocation(), locationDel)).collect(Collectors.toList()); this.storageSwaggerLocationList(locationList); + // 代理地址判断 + if (location.contains(Consts.PROXY_API_DOCS)) { + Integer nextId = Integer.valueOf(location.substring(location.indexOf("?id=") + 4)); + storageService.remove(StorageKeys.PROXY_API_DOCS + nextId); + } return DocResponseJson.ok(); } diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgOpenDocController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgOpenDocController.java index d3b16b59..732d37b9 100644 --- a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgOpenDocController.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgOpenDocController.java @@ -10,10 +10,7 @@ import com.zyplayer.doc.swagger.framework.service.MgStorageService; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -100,6 +97,23 @@ public class MgOpenDocController { DocResponseJson.ok(swaggerResourceStrList).send(response); } + /** + * 获取增加的json格式文档 + * + * @author 暮光:城中城 + * @since 2019年8月11日 + * @param id swagger的文档内容的id + * @return 添加结果 + */ + @GetMapping(value = "/proxyApiDocs") + public String getApiDocs(Long id) { + String result = storageService.get(StorageKeys.PROXY_API_DOCS + id); + if (StringUtils.isBlank(result)) { + return DocResponseJson.warn("未找到该文档").toJson(); + } + return result; + } + /** * 全局参数 */ diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgProxyApiDocController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgProxyApiDocController.java new file mode 100644 index 00000000..bb7fa7f0 --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgProxyApiDocController.java @@ -0,0 +1,46 @@ +package com.zyplayer.doc.swagger.controller; + +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.swagger.framework.constant.Consts; +import com.zyplayer.doc.swagger.framework.constant.StorageKeys; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 接口文档代理返回控制器 + * + * @author 暮光:城中城 + * @since 2019年8月11日 + */ +@RestController +@RequestMapping("/swagger-mg-ui/document") +public class MgProxyApiDocController { + private static Logger logger = LoggerFactory.getLogger(MgProxyApiDocController.class); + + @Resource + private MgStorageService storageService; + + /** + * 获取增加的json格式文档 + * + * @param id swagger的文档内容的id + * @return 结果 + * @author 暮光:城中城 + * @since 2019年8月11日 + */ + @GetMapping(value = Consts.PROXY_API_DOCS) + public String getApiDocs(Long id) { + String result = storageService.get(StorageKeys.PROXY_API_DOCS + id); + if (StringUtils.isBlank(result)) { + return DocResponseJson.warn("未找到该文档").toJson(); + } + return result; + } +} diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Consts.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Consts.java index 44be0bef..d9a9acc4 100644 --- a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Consts.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Consts.java @@ -5,4 +5,5 @@ public class Consts { public static final String ZYPLAYER_PROXY = "/zyplayer-proxy/"; public static final String V2_API_DOCS = "/v2/api-docs"; public static final String SWAGGER_RESOURCES = "/swagger-resources"; + public static final String PROXY_API_DOCS = "/proxy-api-docs"; } diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java index 45ea5d4f..e7a985e9 100644 --- a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java @@ -19,4 +19,6 @@ public class StorageKeys { public static final String SWAGGER_ID_WORKER = "swagger-id-worker"; // 全局参数 public static final String GLOBAL_PARAM_LIST = "zyplayer-doc-global-param-list"; + // 代理的文档内容 + public static final String PROXY_API_DOCS = "proxy-api-docs-"; } diff --git a/zyplayer-doc-swagger/src/main/resources/webjars/zpages/docUrlDetailConfig.html b/zyplayer-doc-swagger/src/main/resources/webjars/zpages/docUrlDetailConfig.html index c7db9cd0..6f308552 100644 --- a/zyplayer-doc-swagger/src/main/resources/webjars/zpages/docUrlDetailConfig.html +++ b/zyplayer-doc-swagger/src/main/resources/webjars/zpages/docUrlDetailConfig.html @@ -58,8 +58,12 @@