实现swagger的代理请求和拿到返回结果并展示了
This commit is contained in:
@@ -75,7 +75,7 @@ public class SwaggerDocumentController {
|
|||||||
// UI地址替换为文档json地址
|
// UI地址替换为文档json地址
|
||||||
String docUrl = SwaggerDocUtil.replaceSwaggerResources(swaggerDoc.getDocUrl());
|
String docUrl = SwaggerDocUtil.replaceSwaggerResources(swaggerDoc.getDocUrl());
|
||||||
if (SwaggerDocUtil.isSwaggerResources(docUrl)) {
|
if (SwaggerDocUtil.isSwaggerResources(docUrl)) {
|
||||||
String resourcesStr = swaggerHttpRequestService.requestUrl(request, docUrl);
|
String resourcesStr = swaggerHttpRequestService.requestSwaggerUrl(request, docUrl);
|
||||||
List<SwaggerResource> resourceList = JSON.parseArray(resourcesStr, SwaggerResource.class);
|
List<SwaggerResource> resourceList = JSON.parseArray(resourcesStr, SwaggerResource.class);
|
||||||
if (resourceList == null || resourceList.isEmpty()) {
|
if (resourceList == null || resourceList.isEmpty()) {
|
||||||
return DocResponseJson.warn("该地址未找到文档");
|
return DocResponseJson.warn("该地址未找到文档");
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.zyplayer.doc.swaggerplus.controller;
|
||||||
|
|
||||||
|
import com.zyplayer.doc.core.annotation.AuthMan;
|
||||||
|
import com.zyplayer.doc.core.json.DocResponseJson;
|
||||||
|
import com.zyplayer.doc.core.json.ResponseJson;
|
||||||
|
import com.zyplayer.doc.swaggerplus.controller.param.ProxyRequestParam;
|
||||||
|
import com.zyplayer.doc.swaggerplus.controller.vo.ProxyRequestResultVo;
|
||||||
|
import com.zyplayer.doc.swaggerplus.service.SwaggerHttpRequestService;
|
||||||
|
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 javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求参数控制器
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021年10月16日
|
||||||
|
*/
|
||||||
|
@AuthMan
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/doc-swagger/proxy")
|
||||||
|
public class SwaggerPoxyRequestController {
|
||||||
|
private static Logger logger = LoggerFactory.getLogger(SwaggerPoxyRequestController.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SwaggerHttpRequestService swaggerHttpRequestService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代理接口请求
|
||||||
|
*
|
||||||
|
* @return 请求参数
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021年10月16日
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@PostMapping(value = "/request")
|
||||||
|
public ResponseJson<ProxyRequestResultVo> request(HttpServletRequest request, ProxyRequestParam requestParam) {
|
||||||
|
ProxyRequestResultVo requestResult = swaggerHttpRequestService.proxyRequest(request, requestParam);
|
||||||
|
return DocResponseJson.ok(requestResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +1,11 @@
|
|||||||
package com.zyplayer.doc.swaggerplus.controller;
|
package com.zyplayer.doc.swaggerplus.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.zyplayer.doc.core.annotation.AuthMan;
|
import com.zyplayer.doc.core.annotation.AuthMan;
|
||||||
import com.zyplayer.doc.core.exception.ConfirmException;
|
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||||
import com.zyplayer.doc.core.json.DocResponseJson;
|
|
||||||
import com.zyplayer.doc.core.json.ResponseJson;
|
|
||||||
import com.zyplayer.doc.data.repository.manage.entity.SwaggerDoc;
|
import com.zyplayer.doc.data.repository.manage.entity.SwaggerDoc;
|
||||||
import com.zyplayer.doc.data.service.manage.SwaggerDocService;
|
import com.zyplayer.doc.data.service.manage.SwaggerDocService;
|
||||||
import com.zyplayer.doc.swaggerplus.controller.vo.SwaggerResourceVo;
|
import com.zyplayer.doc.swaggerplus.controller.vo.SwaggerResourceVo;
|
||||||
import com.zyplayer.doc.swaggerplus.service.SwaggerHttpRequestService;
|
import com.zyplayer.doc.swaggerplus.service.SwaggerHttpRequestService;
|
||||||
import io.swagger.models.Swagger;
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.util.MimeTypeUtils;
|
import org.springframework.util.MimeTypeUtils;
|
||||||
@@ -21,15 +15,12 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import springfox.documentation.spring.web.json.Json;
|
import springfox.documentation.spring.web.json.Json;
|
||||||
import springfox.documentation.swagger.web.ApiKeyVehicle;
|
import springfox.documentation.swagger.web.ApiKeyVehicle;
|
||||||
import springfox.documentation.swagger.web.SecurityConfiguration;
|
import springfox.documentation.swagger.web.SecurityConfiguration;
|
||||||
import springfox.documentation.swagger.web.SwaggerResource;
|
|
||||||
import springfox.documentation.swagger.web.UiConfiguration;
|
import springfox.documentation.swagger.web.UiConfiguration;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 承接了所有的ApiResourceController的接口
|
* 承接了所有的ApiResourceController的接口
|
||||||
*
|
*
|
||||||
@@ -72,7 +63,7 @@ public class SwaggerProxyController {
|
|||||||
throw new ConfirmException("文档不存在");
|
throw new ConfirmException("文档不存在");
|
||||||
}
|
}
|
||||||
if (Objects.equals(swaggerDoc.getDocType(), 1)) {
|
if (Objects.equals(swaggerDoc.getDocType(), 1)) {
|
||||||
String contentStr = swaggerHttpRequestService.requestUrl(request, swaggerDoc.getDocUrl());
|
String contentStr = swaggerHttpRequestService.requestSwaggerUrl(request, swaggerDoc.getDocUrl());
|
||||||
return new ResponseEntity<>(new Json(contentStr), HttpStatus.OK);
|
return new ResponseEntity<>(new Json(contentStr), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
return new ResponseEntity<>(new Json(swaggerDoc.getJsonContent()), HttpStatus.OK);
|
return new ResponseEntity<>(new Json(swaggerDoc.getJsonContent()), HttpStatus.OK);
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.zyplayer.doc.swaggerplus.controller.param;
|
||||||
|
|
||||||
|
public class ParamData {
|
||||||
|
private String code;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
package com.zyplayer.doc.swaggerplus.controller.param;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代理请求参数
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021-11-04
|
||||||
|
*/
|
||||||
|
public class ProxyRequestParam {
|
||||||
|
private String url;
|
||||||
|
private String method;
|
||||||
|
private String contentType;
|
||||||
|
private String headerParam;
|
||||||
|
private String cookieParam;
|
||||||
|
private String formParam;
|
||||||
|
private String formEncodeParam;
|
||||||
|
private String bodyParam;
|
||||||
|
|
||||||
|
public List<ParamData> getHeaderParamData() {
|
||||||
|
return JSON.parseArray(headerParam, ParamData.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ParamData> getCookieParamData() {
|
||||||
|
return JSON.parseArray(cookieParam, ParamData.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ParamData> getFormParamData() {
|
||||||
|
return JSON.parseArray(formParam, ParamData.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ParamData> getFormEncodeParamData() {
|
||||||
|
return JSON.parseArray(formEncodeParam, ParamData.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeaderParam() {
|
||||||
|
return headerParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeaderParam(String headerParam) {
|
||||||
|
this.headerParam = headerParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCookieParam() {
|
||||||
|
return cookieParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCookieParam(String cookieParam) {
|
||||||
|
this.cookieParam = cookieParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFormParam() {
|
||||||
|
return formParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormParam(String formParam) {
|
||||||
|
this.formParam = formParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFormEncodeParam() {
|
||||||
|
return formEncodeParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormEncodeParam(String formEncodeParam) {
|
||||||
|
this.formEncodeParam = formEncodeParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBodyParam() {
|
||||||
|
return bodyParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBodyParam(String bodyParam) {
|
||||||
|
this.bodyParam = bodyParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMethod() {
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMethod(String method) {
|
||||||
|
this.method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentType() {
|
||||||
|
return contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContentType(String contentType) {
|
||||||
|
this.contentType = contentType;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.zyplayer.doc.swaggerplus.controller.vo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cookie返回值对象
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2018年8月21日
|
||||||
|
*/
|
||||||
|
public class HttpCookieVo {
|
||||||
|
private String name;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public HttpCookieVo() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpCookieVo(String name, String value) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.zyplayer.doc.swaggerplus.controller.vo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* header返回值对象
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2018年8月21日
|
||||||
|
*/
|
||||||
|
public class HttpHeaderVo {
|
||||||
|
private String name;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
package com.zyplayer.doc.swaggerplus.controller.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ProxyRequestResultVo {
|
||||||
|
private List<HttpCookieVo> cookies;
|
||||||
|
private List<HttpHeaderVo> headers;
|
||||||
|
private Integer status;
|
||||||
|
private Long useTime;
|
||||||
|
private String data;
|
||||||
|
private String errorMsg;
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getUseTime() {
|
||||||
|
return useTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUseTime(Long useTime) {
|
||||||
|
this.useTime = useTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(String data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<HttpCookieVo> getCookies() {
|
||||||
|
return cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCookies(List<HttpCookieVo> cookies) {
|
||||||
|
this.cookies = cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<HttpHeaderVo> getHeaders() {
|
||||||
|
return headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeaders(List<HttpHeaderVo> headers) {
|
||||||
|
this.headers = headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErrorMsg() {
|
||||||
|
return errorMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorMsg(String errorMsg) {
|
||||||
|
this.errorMsg = errorMsg;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,20 +1,28 @@
|
|||||||
package com.zyplayer.doc.swaggerplus.service;
|
package com.zyplayer.doc.swaggerplus.service;
|
||||||
|
|
||||||
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpRequest;
|
||||||
|
import cn.hutool.http.HttpResponse;
|
||||||
|
import cn.hutool.http.Method;
|
||||||
|
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||||
import com.zyplayer.doc.data.repository.manage.entity.SwaggerGlobalParam;
|
import com.zyplayer.doc.data.repository.manage.entity.SwaggerGlobalParam;
|
||||||
import com.zyplayer.doc.data.service.manage.SwaggerGlobalParamService;
|
import com.zyplayer.doc.data.service.manage.SwaggerGlobalParamService;
|
||||||
|
import com.zyplayer.doc.swaggerplus.controller.param.ProxyRequestParam;
|
||||||
|
import com.zyplayer.doc.swaggerplus.controller.vo.HttpCookieVo;
|
||||||
|
import com.zyplayer.doc.swaggerplus.controller.vo.HttpHeaderVo;
|
||||||
|
import com.zyplayer.doc.swaggerplus.controller.vo.ProxyRequestResultVo;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.collections.MapUtils;
|
import org.apache.commons.collections.MapUtils;
|
||||||
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.Cookie;
|
import javax.servlet.http.Cookie;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.net.HttpCookie;
|
import java.net.HttpCookie;
|
||||||
import java.util.LinkedList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SwaggerHttpRequestService {
|
public class SwaggerHttpRequestService {
|
||||||
@@ -22,7 +30,15 @@ public class SwaggerHttpRequestService {
|
|||||||
@Resource
|
@Resource
|
||||||
private SwaggerGlobalParamService swaggerGlobalParamService;
|
private SwaggerGlobalParamService swaggerGlobalParamService;
|
||||||
|
|
||||||
public String requestUrl(HttpServletRequest request, String docUrl) {
|
private static final Map<String, Method> requestMethodMap = Stream.of(Method.values()).collect(Collectors.toMap(val -> val.name().toLowerCase(), val -> val));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求真实的swagger文档内容
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021-11-04
|
||||||
|
*/
|
||||||
|
public String requestSwaggerUrl(HttpServletRequest request, String docUrl) {
|
||||||
List<SwaggerGlobalParam> globalParamList = swaggerGlobalParamService.getGlobalParamList();
|
List<SwaggerGlobalParam> globalParamList = swaggerGlobalParamService.getGlobalParamList();
|
||||||
Map<String, Object> globalFormParamMap = globalParamList.stream().filter(item -> Objects.equals(item.getParamType(), 1))
|
Map<String, Object> globalFormParamMap = globalParamList.stream().filter(item -> Objects.equals(item.getParamType(), 1))
|
||||||
.collect(Collectors.toMap(SwaggerGlobalParam::getParamKey, SwaggerGlobalParam::getParamValue));
|
.collect(Collectors.toMap(SwaggerGlobalParam::getParamKey, SwaggerGlobalParam::getParamValue));
|
||||||
@@ -33,14 +49,78 @@ public class SwaggerHttpRequestService {
|
|||||||
// 执行请求
|
// 执行请求
|
||||||
String resultStr = HttpRequest.get(docUrl)
|
String resultStr = HttpRequest.get(docUrl)
|
||||||
.form(globalFormParamMap)
|
.form(globalFormParamMap)
|
||||||
|
.addHeaders(this.getHttpHeader(request, globalHeaderParamMap))
|
||||||
.header("Accept", "application/json, text/javascript, */*; q=0.01")
|
.header("Accept", "application/json, text/javascript, */*; q=0.01")
|
||||||
.header("User-Agent", request.getHeader("User-Agent"))
|
|
||||||
.addHeaders(globalHeaderParamMap)
|
|
||||||
.cookie(this.getHttpCookie(request, globalCookieParamMap))
|
.cookie(this.getHttpCookie(request, globalCookieParamMap))
|
||||||
.timeout(5000).execute().body();
|
.timeout(10000).execute().body();
|
||||||
return resultStr;
|
return resultStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行代理请求
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021-11-04
|
||||||
|
*/
|
||||||
|
public ProxyRequestResultVo proxyRequest(HttpServletRequest request, ProxyRequestParam requestParam) {
|
||||||
|
ProxyRequestResultVo resultVo = new ProxyRequestResultVo();
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
try {
|
||||||
|
// 执行请求
|
||||||
|
Method method = requestMethodMap.get(requestParam.getMethod());
|
||||||
|
if (method == null) {
|
||||||
|
throw new ConfirmException("不支持的请求方式:" + requestParam.getMethod());
|
||||||
|
}
|
||||||
|
HttpRequest httpRequest = new HttpRequest(requestParam.getUrl()).setMethod(method);
|
||||||
|
// http自带参数
|
||||||
|
httpRequest.addHeaders(this.getHttpHeader(request, Collections.emptyMap()));
|
||||||
|
httpRequest.cookie(this.getHttpCookie(request, Collections.emptyMap()));
|
||||||
|
// 用户输入的参数
|
||||||
|
requestParam.getFormParamData().forEach(data -> httpRequest.form(data.getCode(), data.getValue()));
|
||||||
|
requestParam.getFormEncodeParamData().forEach(data -> httpRequest.form(data.getCode(), data.getValue()));
|
||||||
|
requestParam.getHeaderParamData().forEach(data -> httpRequest.header(data.getCode(), data.getValue()));
|
||||||
|
if (StringUtils.isNotBlank(requestParam.getBodyParam())) {
|
||||||
|
httpRequest.body(requestParam.getBodyParam());
|
||||||
|
}
|
||||||
|
// 强制设置类型
|
||||||
|
if (StringUtils.isNotBlank(requestParam.getContentType())) {
|
||||||
|
httpRequest.contentType(requestParam.getContentType());
|
||||||
|
}
|
||||||
|
// 执行请求
|
||||||
|
HttpResponse httpResponse = httpRequest.timeout(10000).execute();
|
||||||
|
resultVo.setData(httpResponse.body());
|
||||||
|
resultVo.setStatus(httpResponse.getStatus());
|
||||||
|
// 设置返回的cookies
|
||||||
|
List<HttpCookie> responseCookies = httpResponse.getCookies();
|
||||||
|
if (CollectionUtils.isNotEmpty(responseCookies)) {
|
||||||
|
resultVo.setCookies(responseCookies.stream().map(val -> new HttpCookieVo(val.getName(), val.getValue())).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
// 设置返回的headers
|
||||||
|
Map<String, List<String>> responseHeaders = httpResponse.headers();
|
||||||
|
if (MapUtils.isNotEmpty(responseHeaders)) {
|
||||||
|
List<HttpHeaderVo> headerList = new ArrayList<>(responseHeaders.size());
|
||||||
|
for (Map.Entry<String, List<String>> httpHeader : responseHeaders.entrySet()) {
|
||||||
|
HttpHeaderVo vo = new HttpHeaderVo();
|
||||||
|
vo.setName(httpHeader.getKey());
|
||||||
|
vo.setValue(String.join(";", httpHeader.getValue()));
|
||||||
|
headerList.add(vo);
|
||||||
|
}
|
||||||
|
resultVo.setHeaders(headerList);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
resultVo.setErrorMsg(e.getMessage());
|
||||||
|
}
|
||||||
|
resultVo.setUseTime(System.currentTimeMillis() - startTime);
|
||||||
|
return resultVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取http的cookie
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021-11-04
|
||||||
|
*/
|
||||||
private List<HttpCookie> getHttpCookie(HttpServletRequest request, Map<String, String> globalCookieParamMap) {
|
private List<HttpCookie> getHttpCookie(HttpServletRequest request, Map<String, String> globalCookieParamMap) {
|
||||||
List<HttpCookie> httpCookies = new LinkedList<>();
|
List<HttpCookie> httpCookies = new LinkedList<>();
|
||||||
for (Cookie cookie : request.getCookies()) {
|
for (Cookie cookie : request.getCookies()) {
|
||||||
@@ -51,4 +131,27 @@ public class SwaggerHttpRequestService {
|
|||||||
}
|
}
|
||||||
return httpCookies;
|
return httpCookies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取http的header
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021-11-04
|
||||||
|
*/
|
||||||
|
private Map<String, String> getHttpHeader(HttpServletRequest request, Map<String, String> globalHeaderParamMap) {
|
||||||
|
Map<String, String> headerParamMap = new HashMap<>();
|
||||||
|
Enumeration<String> headerNames = request.getHeaderNames();
|
||||||
|
String[] notNeedHeaders = new String[]{"referer", "origin", "host"};
|
||||||
|
while (headerNames.hasMoreElements()) {
|
||||||
|
String headerName = headerNames.nextElement();
|
||||||
|
if (ArrayUtils.contains(notNeedHeaders, headerName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// headerParamMap.put(headerName, request.getHeader(headerName));
|
||||||
|
}
|
||||||
|
if (MapUtils.isNotEmpty(globalHeaderParamMap)) {
|
||||||
|
headerParamMap.putAll(globalHeaderParamMap);
|
||||||
|
}
|
||||||
|
return headerParamMap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
import{O as a,P as e,r as t,c as o,w as s,o as l,a as n,p as r,t as c,b as g,n as f,d as i,e as u,F as d}from"./vendor.cbf1194d.js";const w={setup(){const t=a();return{swaggerDoc:e((()=>t.state.swaggerDoc)),swaggerDocInfo:e((()=>t.state.swaggerDoc.info)),methodStatistic:e((()=>t.state.methodStatistic))}}},D=["href"],I=["href"],_=["innerHTML"],m={key:1,style:{"text-align":"center"}};w.render=function(a,e,w,T,b,p){const h=t("a-form-item"),k=t("a-statistic"),y=t("a-card"),E=t("a-col"),O=t("a-row"),S=t("a-form");return l(),o(y,null,{default:s((()=>[T.swaggerDocInfo?(l(),o(S,{key:0,"label-col":{span:4},"wrapper-col":{span:20}},{default:s((()=>[n(h,{label:"标题"},{default:s((()=>[r(c(T.swaggerDocInfo.title),1)])),_:1}),n(h,{label:"版本"},{default:s((()=>[r(c(T.swaggerDocInfo.version),1)])),_:1}),T.swaggerDocInfo.contact?(l(),o(h,{key:0,label:"作者"},{default:s((()=>[r(c(T.swaggerDocInfo.contact.name)+" "+c(T.swaggerDocInfo.contact.email)+" ",1),T.swaggerDocInfo.contact.url?(l(),g("a",{key:0,href:T.swaggerDocInfo.contact.url,target:"_blank"},c(T.swaggerDocInfo.contact.url),9,D)):f("",!0)])),_:1})):f("",!0),n(h,{label:"host"},{default:s((()=>[r(c(T.swaggerDoc.host),1)])),_:1}),T.swaggerDocInfo.license?(l(),o(h,{key:1,label:"许可证"},{default:s((()=>[i("a",{href:T.swaggerDocInfo.license.url,target:"_blank"},c(T.swaggerDocInfo.license.name),9,I)])),_:1})):f("",!0),n(h,{label:"文档说明"},{default:s((()=>[i("span",{innerHTML:T.swaggerDocInfo.description},null,8,_)])),_:1}),n(h,{label:"接口统计"},{default:s((()=>[n(O,{gutter:[16,16]},{default:s((()=>[(l(),g(d,null,u(["GET","POST","PUT","DELETE","HEAD","PATCH","OPTIONS","TRACE","TOTAL"],(a=>(l(),g(d,null,[T.methodStatistic[a]?(l(),o(E,{key:0,span:6},{default:s((()=>[n(y,{size:"small"},{default:s((()=>[n(k,{title:"TOTAL"===a?"总计":a+"方法",value:T.methodStatistic[a],suffix:"个"},null,8,["title","value"])])),_:2},1024)])),_:2},1024)):f("",!0)],64)))),64))])),_:1})])),_:1})])),_:1})):(l(),g("div",m,"暂无文档信息,请先选择文档"))])),_:1})};export{w as default};
|
|
||||||
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/DocInfo.dc3c1689.js
vendored
Normal file
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/DocInfo.dc3c1689.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
import{O as p,P as d,r,o as t,c as s,w as a,a as o,p as f,t as c,b as i,n as g,e as D,d as y,F as I}from"./vendor.1f907179.js";import{_ as S}from"./main.b5589b09.js";const v={setup(){const l=p(),m=d(()=>l.state.swaggerDoc),w=d(()=>l.state.swaggerDoc.info),e=d(()=>l.state.methodStatistic);return{swaggerDoc:m,swaggerDocInfo:w,methodStatistic:e}}},x=["href"],E=["href"],L=["innerHTML"],O={key:1,style:{"text-align":"center"}};function A(l,m,w,e,C,N){const n=r("a-form-item"),T=r("a-statistic"),u=r("a-card"),b=r("a-col"),h=r("a-row"),k=r("a-form");return t(),s(u,null,{default:a(()=>[e.swaggerDocInfo?(t(),s(k,{key:0,"label-col":{span:4},"wrapper-col":{span:20}},{default:a(()=>[o(n,{label:"\u6807\u9898"},{default:a(()=>[f(c(e.swaggerDocInfo.title),1)]),_:1}),o(n,{label:"\u7248\u672C"},{default:a(()=>[f(c(e.swaggerDocInfo.version),1)]),_:1}),e.swaggerDocInfo.contact?(t(),s(n,{key:0,label:"\u4F5C\u8005"},{default:a(()=>[f(c(e.swaggerDocInfo.contact.name)+" "+c(e.swaggerDocInfo.contact.email)+" ",1),e.swaggerDocInfo.contact.url?(t(),i("a",{key:0,href:e.swaggerDocInfo.contact.url,target:"_blank"},c(e.swaggerDocInfo.contact.url),9,x)):g("",!0)]),_:1})):g("",!0),o(n,{label:"host"},{default:a(()=>[f(c(e.swaggerDoc.host),1)]),_:1}),e.swaggerDocInfo.license?(t(),s(n,{key:1,label:"\u8BB8\u53EF\u8BC1"},{default:a(()=>[D("a",{href:e.swaggerDocInfo.license.url,target:"_blank"},c(e.swaggerDocInfo.license.name),9,E)]),_:1})):g("",!0),o(n,{label:"\u6587\u6863\u8BF4\u660E"},{default:a(()=>[D("span",{innerHTML:e.swaggerDocInfo.description},null,8,L)]),_:1}),o(n,{label:"\u63A5\u53E3\u7EDF\u8BA1"},{default:a(()=>[o(h,{gutter:[16,16]},{default:a(()=>[(t(),i(I,null,y(["GET","POST","PUT","DELETE","HEAD","PATCH","OPTIONS","TRACE","TOTAL"],_=>(t(),i(I,null,[e.methodStatistic[_]?(t(),s(b,{key:0,span:6},{default:a(()=>[o(u,{size:"small"},{default:a(()=>[o(T,{title:_==="TOTAL"?"\u603B\u8BA1":_+"\u65B9\u6CD5",value:e.methodStatistic[_],suffix:"\u4E2A"},null,8,["title","value"])]),_:2},1024)]),_:2},1024)):g("",!0)],64))),64))]),_:1})]),_:1})]),_:1})):(t(),i("div",O,"\u6682\u65E0\u6587\u6863\u4FE1\u606F\uFF0C\u8BF7\u5148\u9009\u62E9\u6587\u6863"))]),_:1})}var H=S(v,[["render",A]]);export{H as default};
|
||||||
9
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/DocManage.780beadf.js
vendored
Normal file
9
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/DocManage.780beadf.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2494
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/DocView.967e78b1.js
vendored
Normal file
2494
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/DocView.967e78b1.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
6
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/GlobalLayout.a8b6fa3b.js
vendored
Normal file
6
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/GlobalLayout.a8b6fa3b.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
var e=Object.defineProperty,a=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable,o=(a,t,l)=>t in a?e(a,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):a[t]=l;import{z as d}from"./custom.79099f61.js";import{O as i,Q as n,R as r,r as c,b as u,d as s,a as p,w as y,F as m,o as v,c as k,t as f,n as E,p as g}from"./vendor.cbf1194d.js";const b={setup(){i();let e=n([]),c=n(!1);const u=async()=>{s.value={},c.value=!0,d.docSwaggerGlobalParamList().then((a=>{setTimeout((()=>c.value=!1),500),e.value=a.data||[]}))};let s=n({});const p=a=>{a.isEdit=!1,a.id?e.value.forEach((e=>e.isEdit=!1)):e.value=e.value.filter((e=>e!==a)),s.value={}};return r((()=>{u()})),{docList:e,docListLoading:c,docEdit:s,searchDocList:u,deleteDoc:async e=>{d.docSwaggerGlobalParamUpdate({id:e.id,yn:0}).then((e=>{u()}))},editDoc:e=>{s.value.isEdit&&p(s.value),e.isEdit=!0,s.value=((e,d)=>{for(var i in d||(d={}))t.call(d,i)&&o(e,i,d[i]);if(a)for(var i of a(d))l.call(d,i)&&o(e,i,d[i]);return e})({},e)},saveEditDoc:e=>{d.docSwaggerGlobalParamUpdate(s.value).then((a=>{e.isEdit=!1,u()}))},cancelEditDoc:p,addDocLine:()=>{s.value.isEdit&&p(s.value);let a={isEdit:!0};e.value.push(a),s.value=a},docListColumns:[{title:"参数名称",dataIndex:"paramKey",width:250},{title:"参数值",dataIndex:"paramValue"},{title:"参数位置",dataIndex:"paramType",width:120},{title:"操作",dataIndex:"operation",fixed:"right",width:170}]}}},h={style:{"margin-bottom":"10px","text-align":"right"}},x=g("刷新"),C=g("新建"),_={key:1},L={key:1},w=g("Form"),D=g("Header"),I=g("Cookie"),O=g("Form"),j=g("Header"),P=g("Cookie"),S=g("取消"),T=g("保存"),U=g("编辑"),K=g("删除");b.render=function(e,a,t,l,o,d){const i=c("a-button"),n=c("a-input"),r=c("a-textarea"),g=c("a-select-option"),b=c("a-select"),V=c("a-tag"),F=c("a-popconfirm"),G=c("a-table");return v(),u(m,null,[s("div",h,[p(i,{onClick:l.searchDocList,type:"primary"},{default:y((()=>[x])),_:1},8,["onClick"]),p(i,{onClick:l.addDocLine},{default:y((()=>[C])),_:1},8,["onClick"])]),p(G,{dataSource:l.docList,columns:l.docListColumns,size:"middle",loading:l.docListLoading,pagination:!1,scroll:{x:1e3,y:"calc(100vh - 340px)"}},{bodyCell:y((({column:e,text:t,record:o})=>["paramKey"===e.dataIndex?(v(),u(m,{key:0},[o.isEdit?(v(),k(n,{key:0,placeholder:"请输入参数名称",value:l.docEdit.paramKey,"onUpdate:value":a[0]||(a[0]=e=>l.docEdit.paramKey=e)},null,8,["value"])):(v(),u("span",_,f(t),1))],64)):E("",!0),"paramValue"===e.dataIndex?(v(),u(m,{key:1},[o.isEdit?(v(),k(r,{key:0,rows:1,placeholder:"请输入参数值",value:l.docEdit.paramValue,"onUpdate:value":a[1]||(a[1]=e=>l.docEdit.paramValue=e)},null,8,["value"])):(v(),u("span",L,f(t),1))],64)):E("",!0),"paramType"===e.dataIndex?(v(),u(m,{key:2},[o.isEdit?(v(),k(b,{key:0,placeholder:"参数位置",value:l.docEdit.paramType,"onUpdate:value":a[2]||(a[2]=e=>l.docEdit.paramType=e),style:{width:"110px"}},{default:y((()=>[p(g,{value:1},{default:y((()=>[w])),_:1}),p(g,{value:2},{default:y((()=>[D])),_:1}),p(g,{value:3},{default:y((()=>[I])),_:1})])),_:1},8,["value"])):(v(),u(m,{key:1},[1===t?(v(),k(V,{key:0,color:"green"},{default:y((()=>[O])),_:1})):2===t?(v(),k(V,{key:1,color:"pink"},{default:y((()=>[j])),_:1})):3===t?(v(),k(V,{key:2,color:"pink"},{default:y((()=>[P])),_:1})):E("",!0)],64))],64)):E("",!0),"operation"===e.dataIndex?(v(),u(m,{key:3},[o.isEdit?(v(),u(m,{key:0},[p(i,{type:"link",onClick:e=>l.cancelEditDoc(o)},{default:y((()=>[S])),_:2},1032,["onClick"]),p(i,{type:"link",onClick:e=>l.saveEditDoc(o)},{default:y((()=>[T])),_:2},1032,["onClick"])],64)):(v(),u(m,{key:1},[p(i,{type:"link",onClick:e=>l.editDoc(o)},{default:y((()=>[U])),_:2},1032,["onClick"]),p(F,{title:"确定要删除吗?",onConfirm:e=>l.deleteDoc(o)},{default:y((()=>[p(i,{type:"link",danger:""},{default:y((()=>[K])),_:1})])),_:2},1032,["onConfirm"])],64))],64)):E("",!0)])),_:1},8,["dataSource","columns","loading","scroll"])],64)};export{b as default};
|
|
||||||
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/GlobalParam.582cc314.js
vendored
Normal file
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/GlobalParam.582cc314.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
var B=Object.defineProperty;var w=Object.getOwnPropertySymbols;var F=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var I=(i,a,o)=>a in i?B(i,a,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[a]=o,V=(i,a)=>{for(var o in a||(a={}))F.call(a,o)&&I(i,o,a[o]);if(w)for(var o of w(a))G.call(a,o)&&I(i,o,a[o]);return i};import{z as x}from"./custom.93dbced2.js";import{O as K,Q as b,R as N,r as p,o as n,b as r,e as P,a as s,w as l,F as m,c as v,t as S,n as k,p as d}from"./vendor.1f907179.js";import{_ as j}from"./main.b5589b09.js";const z={setup(){K();let i=b([]),a=b(!1);const o=async()=>{e.value={},a.value=!0,x.docSwaggerGlobalParamList().then(t=>{setTimeout(()=>a.value=!1,500),i.value=t.data||[]})};let e=b({});const L=()=>{e.value.isEdit&&c(e.value);let t={isEdit:!0};i.value.push(t),e.value=t},D=t=>{e.value.isEdit&&c(e.value),t.isEdit=!0,e.value=V({},t)},c=t=>{t.isEdit=!1,t.id?i.value.forEach(f=>f.isEdit=!1):i.value=i.value.filter(f=>f!==t),e.value={}},E=t=>{x.docSwaggerGlobalParamUpdate(e.value).then(f=>{t.isEdit=!1,o()})},g=async t=>{x.docSwaggerGlobalParamUpdate({id:t.id,yn:0}).then(f=>{o()})};return N(()=>{o()}),{docList:i,docListLoading:a,docEdit:e,searchDocList:o,deleteDoc:g,editDoc:D,saveEditDoc:E,cancelEditDoc:c,addDocLine:L,docListColumns:[{title:"\u53C2\u6570\u540D\u79F0",dataIndex:"paramKey",width:250},{title:"\u53C2\u6570\u503C",dataIndex:"paramValue"},{title:"\u53C2\u6570\u4F4D\u7F6E",dataIndex:"paramType",width:120},{title:"\u64CD\u4F5C",dataIndex:"operation",fixed:"right",width:170}]}}},H={style:{"margin-bottom":"10px","text-align":"right"}},A=d("\u5237\u65B0"),M=d("\u65B0\u5EFA"),O={key:1},Q={key:1},R=d("Form"),q=d("Header"),J=d("Cookie"),W=d("Form"),X=d("Header"),Y=d("Cookie"),Z=d("\u53D6\u6D88"),$=d("\u4FDD\u5B58"),ee=d("\u7F16\u8F91"),ae=d("\u5220\u9664");function te(i,a,o,e,L,D){const c=p("a-button"),E=p("a-input"),g=p("a-textarea"),t=p("a-select-option"),f=p("a-select"),C=p("a-tag"),T=p("a-popconfirm"),U=p("a-table");return n(),r(m,null,[P("div",H,[s(c,{onClick:e.searchDocList,type:"primary"},{default:l(()=>[A]),_:1},8,["onClick"]),s(c,{onClick:e.addDocLine},{default:l(()=>[M]),_:1},8,["onClick"])]),s(U,{dataSource:e.docList,columns:e.docListColumns,size:"middle",loading:e.docListLoading,pagination:!1,scroll:{x:1e3,y:"calc(100vh - 340px)"}},{bodyCell:l(({column:h,text:y,record:u})=>[h.dataIndex==="paramKey"?(n(),r(m,{key:0},[u.isEdit?(n(),v(E,{key:0,placeholder:"\u8BF7\u8F93\u5165\u53C2\u6570\u540D\u79F0",value:e.docEdit.paramKey,"onUpdate:value":a[0]||(a[0]=_=>e.docEdit.paramKey=_)},null,8,["value"])):(n(),r("span",O,S(y),1))],64)):k("",!0),h.dataIndex==="paramValue"?(n(),r(m,{key:1},[u.isEdit?(n(),v(g,{key:0,rows:1,placeholder:"\u8BF7\u8F93\u5165\u53C2\u6570\u503C",value:e.docEdit.paramValue,"onUpdate:value":a[1]||(a[1]=_=>e.docEdit.paramValue=_)},null,8,["value"])):(n(),r("span",Q,S(y),1))],64)):k("",!0),h.dataIndex==="paramType"?(n(),r(m,{key:2},[u.isEdit?(n(),v(f,{key:0,placeholder:"\u53C2\u6570\u4F4D\u7F6E",value:e.docEdit.paramType,"onUpdate:value":a[2]||(a[2]=_=>e.docEdit.paramType=_),style:{width:"110px"}},{default:l(()=>[s(t,{value:1},{default:l(()=>[R]),_:1}),s(t,{value:2},{default:l(()=>[q]),_:1}),s(t,{value:3},{default:l(()=>[J]),_:1})]),_:1},8,["value"])):(n(),r(m,{key:1},[y===1?(n(),v(C,{key:0,color:"green"},{default:l(()=>[W]),_:1})):y===2?(n(),v(C,{key:1,color:"pink"},{default:l(()=>[X]),_:1})):y===3?(n(),v(C,{key:2,color:"pink"},{default:l(()=>[Y]),_:1})):k("",!0)],64))],64)):k("",!0),h.dataIndex==="operation"?(n(),r(m,{key:3},[u.isEdit?(n(),r(m,{key:0},[s(c,{type:"link",onClick:_=>e.cancelEditDoc(u)},{default:l(()=>[Z]),_:2},1032,["onClick"]),s(c,{type:"link",onClick:_=>e.saveEditDoc(u)},{default:l(()=>[$]),_:2},1032,["onClick"])],64)):(n(),r(m,{key:1},[s(c,{type:"link",onClick:_=>e.editDoc(u)},{default:l(()=>[ee]),_:2},1032,["onClick"]),s(T,{title:"\u786E\u5B9A\u8981\u5220\u9664\u5417\uFF1F",onConfirm:_=>e.deleteDoc(u)},{default:l(()=>[s(c,{type:"link",danger:""},{default:l(()=>[ae]),_:1})]),_:2},1032,["onConfirm"])],64))],64)):k("",!0)]),_:1},8,["dataSource","columns","loading","scroll"])],64)}var de=j(z,[["render",te]]);export{de as default};
|
||||||
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/SettingView.8295c58d.js
vendored
Normal file
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/SettingView.8295c58d.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e}from"./main.b5589b09.js";import{o as t,b as o}from"./vendor.1f907179.js";const n={name:"SettingView",components:{},data(){return{}},computed:{},mounted(){},methods:{}};function r(a,s,c,m,i,p){return t(),o("div",null," \u5C55\u793A\u914D\u7F6E\u9875\u9762 ")}var f=e(n,[["render",r]]);export{f as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{b as e,o as t}from"./vendor.cbf1194d.js";const n={name:"SettingView",components:{},data:()=>({}),computed:{},mounted(){},methods:{}};n.render=function(n,o,d,r,a,m){return t(),e("div",null," 展示配置页面 ")};export{n as default};
|
|
||||||
File diff suppressed because one or more lines are too long
5
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/custom.93dbced2.js
vendored
Normal file
5
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/custom.93dbced2.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/main.b5589b09.js
vendored
Normal file
1
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/main.b5589b09.js
vendored
Normal file
File diff suppressed because one or more lines are too long
8
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/style.3bf21d5d.css
vendored
Normal file
8
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/style.3bf21d5d.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
195
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/vendor.1f907179.js
vendored
Normal file
195
zyplayer-doc-swagger-plus/src/main/resources/dist/assets/vendor.1f907179.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,9 +5,9 @@
|
|||||||
<link rel="icon" href="logo.png" />
|
<link rel="icon" href="logo.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Swagger文档管理</title>
|
<title>Swagger文档管理</title>
|
||||||
<script type="module" crossorigin src="assets/main.23f5737f.js"></script>
|
<script type="module" crossorigin src="assets/main.b5589b09.js"></script>
|
||||||
<link rel="modulepreload" href="assets/vendor.cbf1194d.js">
|
<link rel="modulepreload" href="assets/vendor.1f907179.js">
|
||||||
<link rel="stylesheet" href="assets/style.6e7ba32f.css">
|
<link rel="stylesheet" href="assets/style.3bf21d5d.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ export const zyplayerApi = {
|
|||||||
swaggerDocUpdate: data => apiClient({url: '/doc-swagger/doc/update', method: 'post', data: data}),
|
swaggerDocUpdate: data => apiClient({url: '/doc-swagger/doc/update', method: 'post', data: data}),
|
||||||
docSwaggerGlobalParamList: data => apiClient({url: '/doc-swagger/global-param/list', method: 'post', data: data}),
|
docSwaggerGlobalParamList: data => apiClient({url: '/doc-swagger/global-param/list', method: 'post', data: data}),
|
||||||
docSwaggerGlobalParamUpdate: data => apiClient({url: '/doc-swagger/global-param/update', method: 'post', data: data}),
|
docSwaggerGlobalParamUpdate: data => apiClient({url: '/doc-swagger/global-param/update', method: 'post', data: data}),
|
||||||
requestUrl: data => apiClient({url: '/doc-swagger/proxy/query', method: 'post', data: data}),
|
requestUrl: data => apiClient({url: '/doc-swagger/proxy/request', method: 'post', data: data}),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
emits: [],
|
emits: [],
|
||||||
setup(props, { attrs, slots, emit, expose}) {
|
setup(props, { attrs, slots, emit, expose}) {
|
||||||
let paramList = props.paramList;
|
let paramList = props.paramList;
|
||||||
let bodyParamObj = {};
|
let bodyParamObj = '';
|
||||||
let getChildren = paramObj => {
|
let getChildren = paramObj => {
|
||||||
if (paramObj.children) {
|
if (paramObj.children) {
|
||||||
let bodyParamObj = {};
|
let bodyParamObj = {};
|
||||||
@@ -43,8 +43,15 @@
|
|||||||
bodyParamObj[item.name] = getChildren(item);
|
bodyParamObj[item.name] = getChildren(item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let bodyRowParam = ref(JSON.stringify(bodyParamObj, null, 4));
|
let bodyRowParam = ref('');
|
||||||
|
if (bodyParamObj) {
|
||||||
|
bodyRowParam.value = JSON.stringify(bodyParamObj, null, 4);
|
||||||
|
}
|
||||||
|
const getParam = () => {
|
||||||
|
return bodyRowParam.value;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
|
getParam,
|
||||||
bodyRowParam,
|
bodyRowParam,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<a-input-search
|
<a-input-search :addon-before="docInfoShow.method.toUpperCase()" v-model:value="docUrl" @search="sendRequest">
|
||||||
:addon-before="docInfoShow.method.toUpperCase()"
|
<template #enterButton>
|
||||||
v-model:value="docUrl"
|
<a-button type="primary" :loading="requestLoading">发送请求</a-button>
|
||||||
enter-button="发送请求"
|
</template>
|
||||||
@search="sendRequest"
|
</a-input-search>
|
||||||
/>
|
|
||||||
<a-tabs v-model:activeKey="activePage" closable @tab-click="" style="padding: 5px 10px 0;">
|
<a-tabs v-model:activeKey="activePage" closable @tab-click="" style="padding: 5px 10px 0;">
|
||||||
<a-tab-pane tab="URL参数" key="urlParam">
|
<a-tab-pane tab="URL参数" key="urlParam" forceRender>
|
||||||
<ParamTable ref="urlParamRef" v-model:selected="urlParamChecked" :paramList="urlParamList"></ParamTable>
|
<ParamTable ref="urlParamRef" :paramList="urlParamList"></ParamTable>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane tab="请求参数" key="bodyParam" v-if="docInfoShow.method !== 'get'">
|
<a-tab-pane tab="请求参数" key="bodyParam" v-if="docInfoShow.method !== 'get'" forceRender>
|
||||||
<a-radio-group v-model:value="bodyParamType" style="margin-bottom: 5px;">
|
<a-radio-group v-model:value="bodyParamType" style="margin-bottom: 5px;">
|
||||||
<a-radio value="none">none</a-radio>
|
<a-radio value="none">none</a-radio>
|
||||||
<a-radio value="form">form-data</a-radio>
|
<a-radio value="form">form-data</a-radio>
|
||||||
@@ -28,13 +27,14 @@
|
|||||||
<ParamBody ref="bodyParamRef" :paramList="bodyRowParamList"></ParamBody>
|
<ParamBody ref="bodyParamRef" :paramList="bodyRowParamList"></ParamBody>
|
||||||
</div>
|
</div>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane tab="Header参数" key="headerParam">
|
<a-tab-pane tab="Header参数" key="headerParam" forceRender>
|
||||||
<ParamTable ref="headerParamRef" :paramList="headerParamList"></ParamTable>
|
<ParamTable ref="headerParamRef" :paramList="headerParamList"></ParamTable>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane tab="Cookie参数" key="cookieParam">
|
<a-tab-pane tab="Cookie参数" key="cookieParam" forceRender>
|
||||||
<ParamTable ref="cookieParamRef" :paramList="cookieParamList"></ParamTable>
|
<ParamTable ref="cookieParamRef" :paramList="cookieParamList"></ParamTable>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
|
<DocDebuggerResult :result="requestResult"></DocDebuggerResult>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
import {useStore} from 'vuex';
|
import {useStore} from 'vuex';
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from 'ant-design-vue';
|
||||||
import {markdownIt} from 'mavon-editor'
|
import {markdownIt} from 'mavon-editor'
|
||||||
|
import DocDebuggerResult from './DocDebuggerResult.vue'
|
||||||
import ParamTable from '../../../components/params/ParamTable.vue'
|
import ParamTable from '../../../components/params/ParamTable.vue'
|
||||||
import ParamBody from '../../../components/params/ParamBody.vue'
|
import ParamBody from '../../../components/params/ParamBody.vue'
|
||||||
import {CloseOutlined} from '@ant-design/icons-vue';
|
import {CloseOutlined} from '@ant-design/icons-vue';
|
||||||
@@ -67,7 +68,7 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
CloseOutlined, ParamTable, ParamBody
|
CloseOutlined, ParamTable, ParamBody, DocDebuggerResult,
|
||||||
},
|
},
|
||||||
setup(props) {
|
setup(props) {
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
@@ -78,22 +79,18 @@
|
|||||||
let activePage = ref('urlParam');
|
let activePage = ref('urlParam');
|
||||||
// URL参数处理
|
// URL参数处理
|
||||||
const urlParamRef = ref();
|
const urlParamRef = ref();
|
||||||
const urlParamChecked = ref([]);
|
|
||||||
let urlParamListProp = props.requestParamList.filter(item => item.in === 'query');
|
let urlParamListProp = props.requestParamList.filter(item => item.in === 'query');
|
||||||
let urlParamList = ref([]);
|
let urlParamList = ref([]);
|
||||||
// Header参数处理
|
// Header参数处理
|
||||||
const headerParamRef = ref();
|
const headerParamRef = ref();
|
||||||
const headerParamChecked = ref([]);
|
|
||||||
let headerParamListProp = props.requestParamList.filter(item => item.in === 'header');
|
let headerParamListProp = props.requestParamList.filter(item => item.in === 'header');
|
||||||
let headerParamList = ref(JSON.parse(JSON.stringify(headerParamListProp)));
|
let headerParamList = ref(JSON.parse(JSON.stringify(headerParamListProp)));
|
||||||
// cookie参数处理
|
// cookie参数处理
|
||||||
const cookieParamRef = ref();
|
const cookieParamRef = ref();
|
||||||
const cookieParamChecked = ref([]);
|
|
||||||
let cookieParamListProp = props.requestParamList.filter(item => item.in === 'cookie');
|
let cookieParamListProp = props.requestParamList.filter(item => item.in === 'cookie');
|
||||||
let cookieParamList = ref(JSON.parse(JSON.stringify(cookieParamListProp)));
|
let cookieParamList = ref(JSON.parse(JSON.stringify(cookieParamListProp)));
|
||||||
// form参数处理
|
// form参数处理
|
||||||
const formParamRef= ref();
|
const formParamRef= ref();
|
||||||
const formParamChecked = ref([]);
|
|
||||||
let formParamListProp = props.requestParamList.filter(item => item.in === 'formData');
|
let formParamListProp = props.requestParamList.filter(item => item.in === 'formData');
|
||||||
let formParamList = ref([]);
|
let formParamList = ref([]);
|
||||||
if (props.docInfoShow.method === 'post') {
|
if (props.docInfoShow.method === 'post') {
|
||||||
@@ -105,7 +102,6 @@
|
|||||||
}
|
}
|
||||||
// form参数处理
|
// form参数处理
|
||||||
const formEncodeParamRef = ref();
|
const formEncodeParamRef = ref();
|
||||||
const formEncodeParamChecked = ref([]);
|
|
||||||
let formEncodeParamList = ref([]);
|
let formEncodeParamList = ref([]);
|
||||||
// body 参数
|
// body 参数
|
||||||
let bodyParamRef = ref();
|
let bodyParamRef = ref();
|
||||||
@@ -136,45 +132,82 @@
|
|||||||
activePage.value = 'headerParam';
|
activePage.value = 'headerParam';
|
||||||
}
|
}
|
||||||
// 发送请求
|
// 发送请求
|
||||||
|
let requestResult = ref({});
|
||||||
|
let requestLoading = ref(false);
|
||||||
const sendRequest = () => {
|
const sendRequest = () => {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
let selectedRowKeys = urlParamRef.value.getSelectedRowKeys();
|
let urlParamSelected = urlParamRef.value.getSelectedRowKeys();
|
||||||
let urlParamStr = urlParamList.value.filter(item => selectedRowKeys.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
let urlParamStr = urlParamList.value.filter(item => urlParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||||
return item.name + '=' + encodeURIComponent(item.value);
|
return item.name + '=' + encodeURIComponent(item.value);
|
||||||
}).join('&');
|
}).join('&');
|
||||||
console.log('urlParamStr', urlParamStr);
|
let headerParamSelected = headerParamRef.value.getSelectedRowKeys();
|
||||||
|
let headerParamArr = headerParamList.value.filter(item => headerParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||||
|
return {code: item.name, value: item.value};
|
||||||
|
});
|
||||||
|
let cookieParamSelected = cookieParamRef.value.getSelectedRowKeys();
|
||||||
|
let cookieParamArr = cookieParamList.value.filter(item => cookieParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||||
|
return {code: item.name, value: item.value};
|
||||||
|
});
|
||||||
|
let formParamArr = [];
|
||||||
|
if (formParamRef.value) {
|
||||||
|
let formParamSelected = formParamRef.value.getSelectedRowKeys();
|
||||||
|
formParamArr = formParamList.value.filter(item => formParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||||
|
// todo 判断处理文件格式
|
||||||
|
return {code: item.name, value: item.value};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let formEncodeParamArr = [];
|
||||||
|
if (formEncodeParamRef.value) {
|
||||||
|
let formEncodeParamSelected = formEncodeParamRef.value.getSelectedRowKeys();
|
||||||
|
formEncodeParamArr = formEncodeParamList.value.filter(item => formEncodeParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||||
|
// todo 判断处理文件格式
|
||||||
|
return {code: item.name, value: item.value};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let bodyParamStr = '';
|
||||||
|
if (bodyParamRef.value) {
|
||||||
|
bodyParamStr = bodyParamRef.value.getParam();
|
||||||
|
}
|
||||||
// fileList.value.forEach(file => {
|
// fileList.value.forEach(file => {
|
||||||
// formData.append('files[]', file);
|
// formData.append('files[]', file);
|
||||||
// });
|
// });
|
||||||
formData.append('url', docUrl.value + '?' + urlParamStr);
|
let url = urlParamStr ? (docUrl.value + '?' + urlParamStr) : docUrl.value;
|
||||||
|
formData.append('url', url);
|
||||||
|
formData.append('method', props.docInfoShow.method);
|
||||||
|
formData.append('contentType', props.docInfoShow.consumes);
|
||||||
|
formData.append('headerParam', JSON.stringify(headerParamArr));
|
||||||
|
formData.append('cookieParam', JSON.stringify(cookieParamArr));
|
||||||
|
formData.append('formParam', JSON.stringify(formParamArr));
|
||||||
|
formData.append('formEncodeParam', JSON.stringify(formEncodeParamArr));
|
||||||
|
formData.append('bodyParam', bodyParamStr);
|
||||||
|
requestLoading.value = true;
|
||||||
zyplayerApi.requestUrl(formData).then(res => {
|
zyplayerApi.requestUrl(formData).then(res => {
|
||||||
debugger
|
requestResult.value = res;
|
||||||
|
requestLoading.value = false;
|
||||||
|
}).catch(e => {
|
||||||
|
requestLoading.value = false;
|
||||||
});
|
});
|
||||||
message.info('暂未开放此功能,敬请期待');
|
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
docUrl,
|
docUrl,
|
||||||
activePage,
|
activePage,
|
||||||
|
requestLoading,
|
||||||
sendRequest,
|
sendRequest,
|
||||||
|
requestResult,
|
||||||
// url参数
|
// url参数
|
||||||
urlParamRef,
|
urlParamRef,
|
||||||
urlParamChecked,
|
|
||||||
urlParamList,
|
urlParamList,
|
||||||
// header参数
|
// header参数
|
||||||
headerParamRef,
|
headerParamRef,
|
||||||
headerParamChecked,
|
|
||||||
headerParamList,
|
headerParamList,
|
||||||
// cookie参数
|
// cookie参数
|
||||||
cookieParamRef,
|
cookieParamRef,
|
||||||
cookieParamChecked,
|
|
||||||
cookieParamList,
|
cookieParamList,
|
||||||
// form参数
|
// form参数
|
||||||
formParamRef,
|
formParamRef,
|
||||||
formParamChecked,
|
|
||||||
formParamList,
|
formParamList,
|
||||||
// form-encode参数
|
// form-encode参数
|
||||||
formEncodeParamRef,
|
formEncodeParamRef,
|
||||||
formEncodeParamChecked,
|
|
||||||
formEncodeParamList,
|
formEncodeParamList,
|
||||||
// body参数
|
// body参数
|
||||||
bodyParamRef,
|
bodyParamRef,
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-tabs v-model:activeKey="activePage" closable @tab-click="" style="padding: 5px 10px 0;">
|
||||||
|
<a-tab-pane tab="Body" key="body" forceRender>
|
||||||
|
<template v-if="result.data && result.data.data">{{result.data.data}}</template>
|
||||||
|
<template v-else-if="result.data">{{result.data}}</template>
|
||||||
|
<template v-else>{{result}}</template>
|
||||||
|
</a-tab-pane>
|
||||||
|
<a-tab-pane tab="Headers" key="headers" forceRender>
|
||||||
|
<a-table :dataSource="resultHeaders"
|
||||||
|
:columns="resultHeadersColumns" size="small"
|
||||||
|
:pagination="false"
|
||||||
|
:scroll="{ y: '300px' }">
|
||||||
|
</a-table>
|
||||||
|
</a-tab-pane>
|
||||||
|
<a-tab-pane tab="Cookies" key="cookies" forceRender>
|
||||||
|
<a-table :dataSource="resultCookies"
|
||||||
|
:columns="resultCookiesColumns" size="small"
|
||||||
|
:pagination="false"
|
||||||
|
:scroll="{ y: '300px' }">
|
||||||
|
</a-table>
|
||||||
|
</a-tab-pane>
|
||||||
|
</a-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {toRefs, ref, reactive, onMounted, watch} from 'vue';
|
||||||
|
import {useRouter, useRoute} from "vue-router";
|
||||||
|
import {useStore} from 'vuex';
|
||||||
|
import {message} from 'ant-design-vue';
|
||||||
|
import {markdownIt} from 'mavon-editor'
|
||||||
|
import ParamTable from '../../../components/params/ParamTable.vue'
|
||||||
|
import ParamBody from '../../../components/params/ParamBody.vue'
|
||||||
|
import {CloseOutlined} from '@ant-design/icons-vue';
|
||||||
|
import 'mavon-editor/dist/markdown/github-markdown.min.css'
|
||||||
|
import 'mavon-editor/dist/css/index.css'
|
||||||
|
import {zyplayerApi} from "../../../api";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
result: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
CloseOutlined, ParamTable, ParamBody
|
||||||
|
},
|
||||||
|
setup(props) {
|
||||||
|
const { result } = toRefs(props);
|
||||||
|
let activePage = ref('body');
|
||||||
|
let resultHeaders = ref([]);
|
||||||
|
let resultCookies = ref([]);
|
||||||
|
const initData = () => {
|
||||||
|
if (props.result.data) {
|
||||||
|
if (props.result.data.headers) {
|
||||||
|
resultHeaders.value = props.result.data.headers;
|
||||||
|
}
|
||||||
|
if (props.result.data.cookies) {
|
||||||
|
resultCookies.value = props.result.data.cookies;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
initData();
|
||||||
|
watch(result, () => initData());
|
||||||
|
return {
|
||||||
|
activePage,
|
||||||
|
resultHeaders,
|
||||||
|
resultCookies,
|
||||||
|
resultHeadersColumns: [
|
||||||
|
{title: 'KEY', dataIndex: 'name'},
|
||||||
|
{title: 'VALUE', dataIndex: 'value'},
|
||||||
|
],
|
||||||
|
resultCookiesColumns: [
|
||||||
|
{title: 'KEY', dataIndex: 'name'},
|
||||||
|
{title: 'VALUE', dataIndex: 'value'},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user