博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring controller的url扫描
阅读量:6595 次
发布时间:2019-06-24

本文共 3148 字,大约阅读时间需要 10 分钟。

  hot3.png

spring rest项目url规范

用到很多的url,有的不符合规范,需要统计所有url查看哪些不合理,哪些需要改进的。就写了一个小程序来读取Controller的注解来分析rest所用到的url。添加了递归调用的方式,更方便读取。

分析后的结果

package com.lanaya.web.util;/** * @author dongbin.yu * @version 1.0.0 * @since 2015/12/21 */import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import java.io.File;import java.lang.reflect.Method;import java.net.URL;import java.util.ArrayList;import java.util.List;/** * @author dongbin.yu * @version 1.0.0 * @since 2015/10/21 */public class RequestMappingUtil {        private static String controllerUrl = "com.lanaya.web.controller";        public static void main(String[] args){            URL resource = RequestMappingUtil.class.getClass().getResource("/" + controllerUrl.replace('.','/'));            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();            File directory = new File(resource.getPath());            if(directory.isDirectory()){                File[] files = directory.listFiles();                for (File file : files) {                    System.out.println(exportUrl(file));                }            }        }        public static List
exportUrl(File file){ List
urlList = new ArrayList<>(); try { if (file.isDirectory()) { File[] files = file.listFiles(); for (File file1 : files) { urlList.addAll(exportUrl(file1)); } } else { String fileName = file.getName(); Class
clazz = Class.forName(controllerUrl + "." + fileName.substring(0, fileName.indexOf("."))); RequestMapping requestMapping = clazz.getAnnotation(RequestMapping.class); String topUrl = ""; if (requestMapping != null) { topUrl = requestMapping.value()[0]; } Method[] methods = clazz.getMethods(); for (Method method : methods) { RequestMapping annotation = method.getAnnotation(RequestMapping.class); if (annotation != null) { String methodUrl = annotation.value()[0]; if (methodUrl.startsWith("/")) { urlList.add(topUrl + methodUrl + ":" + (annotation.method().length == 0 ? RequestMethod.GET : annotation.method()[0])); } else { urlList.add(topUrl + File.separator + methodUrl + ":" + (annotation.method().length == 0 ? RequestMethod.GET : annotation.method()[0])); } } } } } catch (ClassNotFoundException e) { e.printStackTrace(); } return urlList; }}

通过读取RequestMapping注解和method注解,读取的时候要注意是否在Class头上有前缀。还有是否有层级嵌套。

attributionReport/getAttributionPathList:POST

调用后发现RequestMapping的value和method都是数组,可以接受多个参数的。

转载于:https://my.oschina.net/zooy/blog/522302

你可能感兴趣的文章
Maven_命令
查看>>
配置yum源
查看>>
paste用法
查看>>
数据库学习
查看>>
ACCESS数据库的局限性及解决办法
查看>>
数据库查询中的技巧
查看>>
MySQL创建自定义哈希索引
查看>>
使用平台的风格和主题
查看>>
细说Android开发环境的搭建
查看>>
排序 归并排序 分配排序
查看>>
IT巨鳄操纵下的云计算创新市场
查看>>
Rsync+sersync数据备份
查看>>
我的友情链接
查看>>
【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...
查看>>
非交互模式写入crontab -e
查看>>
Spring常用注解
查看>>
嵌入式Linux ARM汇编(四)——ARM汇编程序设计
查看>>
本地window的Tomcat部署与服务器linux的Tomcat部署无法连接数据库问题(基于Tomcat8.5)...
查看>>
MyBatis学习总结(10)——批量操作
查看>>
面试技巧让你与面试官从容而谈
查看>>