获取所有url和方法的对应关系

 1 @Data
2 public class Param {
3
4 /**
5 * 字段名称
6 */
7 private String name;
8
9 /**
10 *
11 */
12 private String in;
13
14 /**
15 * 字段说明
16 */
17 private String description;
18
19 /**
20 * 字段是否必填
21 */
22 private String required;
23
24 /**
25 * 字段类型
26 */
27 private String type;
28
29 }

Param

 1 @Data
2 public class VelocityTemplate {
3
4 /**
5 * api 标题
6 */
7 private String title;
8
9 /**
10 * url 名称
11 */
12 private String urlName;
13
14 /**
15 * 请求方法
16 */
17 private String requestMethod;
18
19 /**
20 * 方法描述
21 */
22 private String description;
23
24 /**
25 * 参数列表
26 */
27 private List<Param> params;
28
29 /**
30 * 参数数量
31 */
32 private int paramsNum;
33
34 /**
35 * 请求体格式
36 */
37 private String request;
38
39 /**
40 * 返回体格式
41 */
42 private String response;
43
44
45 }

VelocityTemplate


@Autowired
private RequestMappingHandlerMapping mappingHandlerMapping;
 

 1 public List<?> getAllUrl() throws IOException {
2 List<VelocityTemplate> urlList = new ArrayList<>();
3 Map<RequestMappingInfo, HandlerMethod> map = mappingHandlerMapping.getHandlerMethods();
4 for (Map.Entry<RequestMappingInfo, HandlerMethod> methodEntry : map.entrySet()) {
5 VelocityTemplate velocityTemplate = new VelocityTemplate();
6 RequestMappingInfo info = methodEntry.getKey();
7 HandlerMethod method = methodEntry.getValue();
8 PatternsRequestCondition patternsRequestCondition = info.getPatternsCondition();
9 for (String url : patternsRequestCondition.getPatterns()) {
10 velocityTemplate.setUrlName(url);
11 }
12
13 RequestMethodsRequestCondition methodsRequestCondition = info.getMethodsCondition();
14 String type = methodsRequestCondition.toString();
15 if (type.startsWith("[") && type.endsWith("]")) {
16 type = type.substring(1, type.length() - 1);
17 // 方法名
18 velocityTemplate.setRequestMethod(type);
19 }
20 if (StringUtils.hasText(type)) {
21 velocityTemplate.setTitle("###" + (urlList.size() + 1) + "、" + (method.hasMethodAnnotation(ApiOperation.class) ?
22 method.getMethodAnnotation(ApiOperation.class).value() : ""));
23 velocityTemplate.setDescription(method.toString());
24 MethodParameter[] methodParameters = method.getMethodParameters();
25 List<Param> params = new ArrayList<>();
26 for (MethodParameter methodParameter : methodParameters) {
27 if (ObjectUtils.isEmpty(methodParameter.getParameterAnnotations()) || methodParameter.hasParameterAnnotation(Valid.class)) {
28 ReflectionUtils.FieldCallback fieldCallback = field -> {
29 ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);
30 Param param = new Param();
31 if (annotation != null) {
32 param.setName(annotation.name());
33 param.setDescription(annotation.value());
34 } else {
35 param.setName(field.getName());
36 param.setDescription("");
37 }
38 param.setType(field.getType().getTypeName());
39 param.setRequired("是");
40 params.add(param);
41 };
42 if (methodParameter.getParameterType().getName().equals(HttpServletRequest.class.getName()) || methodParameter.getParameterType().getName().equals(HttpServletResponse.class.getName())) {
43 continue;
44 }
45 ReflectionUtils.doWithFields(methodParameter.getParameterType(), fieldCallback,
46 field -> !field.getName().equalsIgnoreCase("serialVersionUID"));
47 } else if (methodParameter.hasParameterAnnotation(RequestParam.class)) {
48 RequestParam requestParamAnnotation =
49 methodParameter.getParameterAnnotation(RequestParam.class);
50 ApiParam apiParam = methodParameter.getParameterAnnotation(ApiParam.class);
51 Param param = new Param();
52 param.setName(requestParamAnnotation.name());
53 param.setRequired(requestParamAnnotation.required() ? "是" : "否");
54 param.setType(methodParameter.getParameterType().getTypeName());
55 param.setDescription(apiParam == null ? "" : apiParam.value());
56 params.add(param);
57 }
58 }
59 velocityTemplate.setParams(params);
60 urlList.add(velocityTemplate);
61 }
62 }
63 GenerateWikiApiDocument.generateFile(urlList, "Statistics");
64 return urlList;
65 }

getAllUrl

 1 public static void generateFile(List<VelocityTemplate> velocityTemplates, String controllerClass) throws IOException {
2 String basePath = "C:\\api\\";
3 FileWriter file = new FileWriter(basePath + controllerClass +"API.md", false);
4 BufferedWriter bufferedWriter = new BufferedWriter(file);
5 //设置velocity资源加载器
6 Properties prop = new Properties();
7 prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" );
8 Velocity.init(prop);
9
10 Map<String, List<VelocityTemplate>> listMap = new HashMap<>();
11 listMap.put("list", velocityTemplates);
12 VelocityContext context = new VelocityContext(listMap);
13 String templatePath = "velocity/swagger.md.vm";
14 Template tpl = Velocity.getTemplate(templatePath, "UTF-8" );
15 tpl.merge(context, bufferedWriter);
16 bufferedWriter.close();
17 file.close();
18 }

GenerateWikiApiDocument#generateFile

 1 #foreach($item in $list)
2 ${item.title}
3
4
5 <table>
6 <tr>
7 <td>URL</td>
8 <td colspan="4">${item.urlName}</td>
9 </tr>
10 <tr>
11 <td>请求方式</td>
12 <td colspan="4">${item.requestMethod}</td>
13 </tr>
14 <tr>
15 <td>方法名</td>
16 <td colspan="4">${item.description}</td>
17 </tr>
18 <tr>
19 #set($size=${item.params.size()} + 3)
20 <td rowspan="$size">参数格式</td>
21 <td>字段</td>
22 <td>字段类型</td>
23 <td>是否必填</td>
24 <td>说明</td>
25 </tr>
26 #foreach($param in $item.params)
27 <tr>
28 <td>${param.name}</td>
29 <td>${param.type}</td>
30 <td>${param.required}</td>
31 <td>${param.description}</td>
32 </tr>
33 #end
34 <tr>
35 <td>请求参数</td>
36 <td colspan="3">${item.request}</td>
37 </tr>
38 <tr>
39 <td>返回参数</td>
40 <td colspan="3">${item.response}</td>
41 </tr>
42 </table>
43
44 #end

velocitytemplate

获取SpringBoot中所有的url和其参数的更多相关文章

  1. Django自动获取项目中的全部URL

    import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...

  2. 获取HTML中所有图片的 URL

    /// <summary> /// 获取HTML中所有图片的 URL /// </summary> /// <param name="strHtml" ...

  3. JS中的的Url传递中文参数乱码,如何获取Url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码:<script type=”text/javascript” ...

  4. 【PHP5.3+】获取getCurrentUrl()中 的地址url

    1.在控制器中调用其他 扩展或者类 的方法时候,getCurrentUrl()方法 是获取的[当前控制器下方法]的路由,不是[其他 扩展或者类 方法]的路由!!! 2.getCurrentUrl()方 ...

  5. JS获取地址栏中的链接URL参数

    function getUrlParam(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&am ...

  6. httpclient开启代理,获取java中请求的url

    背景:在httpclent做post或者get请求时,请求返回的数据总是和预想的不一致,但是有不知道怎么排查问题,经同事说httpclient可以设置代理,就可以获取请求前数据的一些问题,帮助我排查问 ...

  7. 获取字符串中img标签的url集合(转载)

    /// <summary> /// 获取字符串中img的url集合 /// </summary> /// <param name="content"& ...

  8. 正则表达式获取字符串中的img标签中的url链接

    废话不多说直接看代码 JavaScript中的代码: var re = /src=\"([^\"]*?)\"/i; var arr = str.match(re); if ...

  9. 转:Web页面通过URL地址传递参数常见问题及检测方法

    Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述 ...

随机推荐

  1. Zabbix 监控项更多用法

    监控服务端口状态 配置 Zabbix 提供的检测器 配置自定义值映射 查看监控项数据状态 触发器配置 自定义监控项 TCP 11 种状态 TCP 11 种状态 LISTEN - 侦听来自远方TCP端口 ...

  2. 一个C++源文件从文本到可执行文件经历的过程

    一个C++源文件从文本到可执行文件经历的过程 以Hello World为例进行说明 首先我们编写一个cpp源程序 test.cpp #include <iostream> using na ...

  3. 014.NET5_MVC_Razor扩展Html控件02

    第二种方法: 通过一个后台方法,返回一个不存在的html标签字符串,在读取的时候,通过后台方法去渲染成需要的标签和内容: 1. 定义一个普通类,类名称建议以TagHelper结尾,并且给类添加特性[H ...

  4. element-ui UI 组件库剖析

    element-ui UI 组件库剖析 /* Automatically generated by './build/bin/build-entry.js' */ https://github.com ...

  5. You Don't Know Chrome Features

    You Don't Know Chrome Features URL auto convert to QR Code click the tab URL address click QRCode ic ...

  6. macOS 录屏 gif

    macOS 录屏 gif LICEcap bug 授权问题? 如何在 Mac 上录制屏幕 https://support.apple.com/zh-cn/HT208721 Command + Shif ...

  7. IM SDK & websocket & chart room

    IM SDK & websocket & chart room IM SDK https://imsdk.com/ https://cloud.tencent.com/document ...

  8. 3D 室内装修线设计软件

    3D 室内装修线设计软件 WebGL & canvas https://threejs.org/ xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用 ...

  9. DoH & DNS over HTTPS

    DoH & DNS over HTTPS DNS over HTTPS(DoH)服务 http://mozilla.com.cn/thread-422231-1-1.html https:// ...

  10. express+apollo+mongodb

    阿波罗服务器入门 λ yarn add --dev @babel/core @babel/cli @babel/preset-env λ yarn add --dev nodemon // " ...