获取SpringBoot中所有的url和其参数
获取所有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和其参数的更多相关文章
- Django自动获取项目中的全部URL
import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...
- 获取HTML中所有图片的 URL
/// <summary> /// 获取HTML中所有图片的 URL /// </summary> /// <param name="strHtml" ...
- JS中的的Url传递中文参数乱码,如何获取Url中参数问题
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码:<script type=”text/javascript” ...
- 【PHP5.3+】获取getCurrentUrl()中 的地址url
1.在控制器中调用其他 扩展或者类 的方法时候,getCurrentUrl()方法 是获取的[当前控制器下方法]的路由,不是[其他 扩展或者类 方法]的路由!!! 2.getCurrentUrl()方 ...
- JS获取地址栏中的链接URL参数
function getUrlParam(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&am ...
- httpclient开启代理,获取java中请求的url
背景:在httpclent做post或者get请求时,请求返回的数据总是和预想的不一致,但是有不知道怎么排查问题,经同事说httpclient可以设置代理,就可以获取请求前数据的一些问题,帮助我排查问 ...
- 获取字符串中img标签的url集合(转载)
/// <summary> /// 获取字符串中img的url集合 /// </summary> /// <param name="content"& ...
- 正则表达式获取字符串中的img标签中的url链接
废话不多说直接看代码 JavaScript中的代码: var re = /src=\"([^\"]*?)\"/i; var arr = str.match(re); if ...
- 转:Web页面通过URL地址传递参数常见问题及检测方法
Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述 ...
随机推荐
- office响应慢,但电脑速度没问题的解决方案
看了非常多教程都没有用,有点崩,最后终于解决了,记录一下. 问题描述 :office启动没问题,但word打开后,选中一段文字非常慢,大概延迟鼠标移动2-3秒.点击工具栏时也有延迟(点击动画看的十分清 ...
- k8s二进制部署 - coredns安装
coredns的资源清单文件rabc.yaml apiVersion: v1 kind: ServiceAccount metadata: name: coredns namespace: kube- ...
- 在kubernetes集群里集成Apollo配置中心(1)之交付Apollo-adminservice至Kubernetes集群
1.部署apollo-adminservice软件包 apollo-adminservice软件包链接地址:https://github.com/ctripcorp/apollo/releases/d ...
- Zabbix 配置监控 & 触发器
Zabbix 自定义监控 zabbix-agent 获取数据,然后定义,交给 zabbix-server 端 Zabbix 配置监控项 监控的内容 # 监控服务器登录用户的数量 [root@web01 ...
- codeforces 7B
B. Memory Manager time limit per test 1 second memory limit per test 64 megabytes input standard inp ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
- Apple iOS 触控按钮 自动关闭 bug
Apple iOS 触控按钮 自动关闭 bug bug 轻点 iPhone 背面可执行操作 您可以轻点两下或轻点三下 iPhone 背面以执行某些操作,如向上或向下滚动.截屏.打开"控制中心 ...
- 使用 js 实现十大排序算法: 冒泡排序
使用 js 实现十大排序算法: 冒泡排序 冒泡排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- web components in action
web components in action web components css-doodle.js https://alligator.io/workflow/ https://d33wubr ...
- API 授权 All In One
API 授权 All In One 身份验证 授权类型 身份验证类型 继承认证 没有认证 API密钥 不记名令牌 基本认证 摘要授权 OAuth 1.0 OAuth 2.0 授权码 隐含的 密码凭证 ...