springboot获取所有URL和swagger注解参数

本文介绍了一种简便方法,通过RBAC权限模型直接获取应用中所有URL路径及对应的Swagger文档注解,适用于懒于手动编写管理界面的场景。代码示例展示了如何利用Spring框架的RequestMappingHandlerMapping类来实现这一功能。

1.简介

   因为做了RBAC结构的权限模型,又懒得写管理界面,就直接一网打尽,写一个获取所有url路径和swagger文档注解的方法,然后百度了下,大部分都是只获取URL接口路径,我拓展了下,可以加上方法的注解参数。

   swagger注解可以换成自定义的注解,很简单的,注释里有体现。

2.代码

    @Autowired
    private WebApplicationContext applicationContext;

    @RequestMapping(value = "getAllUrl")
    public Object getAllUrl() throws ClassNotFoundException {
        RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
        Map<RequestMappingInfo, HandlerMethod> mappingHandlerMethods = mapping.getHandlerMethods();

        List<UrlDesc> list = new ArrayList();

        for (Map.Entry<RequestMappingInfo, HandlerMethod> map : mappingHandlerMethods.entrySet()) {
            UrlDesc urlDesc = new UrlDesc();
            RequestMappingInfo info = map.getKey();
            HandlerMethod method = map.getValue();
            PatternsRequestCondition patternsCondition = info.getPatternsCondition();
            String className = method.getMethod().getDeclaringClass().getName();
            /**
             * 匹配包路径 根据自己的路径替换
             */
            if (className.contains("com.com.controller")) {
                //获取类对象
                Class clazz = Class.forName(method.getMethod().getDeclaringClass().getName());
                String metName = method.getMethod().getName();
                /**
                 * 因为单独获取一个类对象要指定参数,不适合批量使用,所以获取所有的方法然后根据name筛选
                 */
                Method[] clazzDeclaredMethods = clazz.getDeclaredMethods();
                Arrays.stream(clazzDeclaredMethods).forEach(
                        c -> {
                            if(c.getName().equals(metName)){
                                /* swagger注解 可以换成别的 */
                                ApiOperation annotation = c.getAnnotation(ApiOperation.class);
                                if(null != annotation){
                                    urlDesc.setDesc(annotation.value());
                                }
                            }
                        }
                );
                for(String url : patternsCondition.getPatterns()) {
                    urlDesc.setUrl(url);
                }
                list.add(urlDesc);
            }
        }
        return list;
    }

实体类

@Data
public class UrlDesc implements Serializable,Cloneable {

    private static final long serialVersionUID = 1L;

    /**
     * 路径
     */
    private String url;

    /**
     * 描述
     */
    private String desc;

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值