打印SpringBoot中所有接口

在Application.java中添加以下代码:

import org.springframework.context.ApplicationContext;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.lang.annotation.Annotation;
import cn.xx.annotation.ControllerEndpoint;//自定义写操作方式文字的注解
import io.swagger.annotations.ApiOperation;
import java.util.Map;


public static void methodName(ApplicationContext applicationContext){{

        RequestMappingHandlerMapping requestMappingHandlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
        //获取url与类和方法的对应信息
        Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
        for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : map.entrySet()) {

            RequestMappingInfo reqInfo = entry.getKey();
            HandlerMethod handlerMethod = entry.getValue();

            String path=reqInfo.getPatternsCondition().getPatterns().iterator().next();
            String methodRemark="";
            Annotation[] parentAnnotations = handlerMethod.getMethod().getAnnotations();
            for (Annotation annotation : parentAnnotations) {
                if (annotation instanceof ControllerEndpoint) {
                    ControllerEndpoint api = (ControllerEndpoint) annotation;
                    methodRemark=api.operation();
                }else if(annotation instanceof ApiOperation){
                    ApiOperation api = (ApiOperation) annotation;
                    methodRemark=api.value();
                }
            }
            String method="";
            if(reqInfo.getMethodsCondition().getMethods().iterator().hasNext()) {
                method=reqInfo.getMethodsCondition().getMethods().iterator().next().name();
            }
            System.out.println(path+"\t"+method+"\t"+ handlerMethod.getBeanType().getName()+"\t"+methodRemark);

        }
    }
}
2.使用

methodName(new SpringApplicationBuilder(XX.class).run(args));


3.把控制台输出复制到excel

4.把excel变成json,使用easyexcel

package com.example.easyexcel;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.Data;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.*;
import java.nio.Buffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@SpringBootApplication
public class EasyexcelApplication {

    public static void main(String[] args) throws Exception {
        {
            //SpringApplication.run(EasyexcelApplication.class, args);
            String file="/Users/xx/接口.xlsx";
            String writePath="/Users/xx/easyexcel/out/interface.json";
            PrintWriter pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(writePath),"UTF-8"));

            List<MethodOperation> rst=new ArrayList<>();
            ExcelReaderBuilder readerBuilder=EasyExcel.read(file);
            //获取文件对象
            ExcelReader er=readerBuilder.file(file).build();
            List<ReadSheet> readSheets = er.excelExecutor().sheetList();
            for(ReadSheet rs:readSheets) {
                ExcelReaderBuilder curBuild=EasyExcel.read(file);
                //指定sheet
                curBuild.sheet(rs.getSheetName());
                //自动关闭输入流
                curBuild.autoCloseStream(true);
                //设置excel格式
                curBuild.excelType(ExcelTypeEnum.XLSX);
                //readerBuilder.excelType(ExcelTypeEnum.XLS);
                //注册监听器,进行数据解析
                curBuild.registerReadListener(new AnalysisEventListener() {
                    @Override
                    public void invoke(Object o, AnalysisContext analysisContext) {
                        //读取一行数据回调
                        System.out.println(o);
                        Map<Integer,String> map=(Map)o;
                        MethodOperation mo=new MethodOperation();
                        mo.setMethod(map.get(1));
                        mo.setSystem(rs.getSheetName());
                        String url=map.get(0);
                        int idx=url.indexOf("/{");
                        if(idx!=-1){
                            url=url.substring(0,idx);
                        }
                        mo.setUrl(url);
                        mo.setOperName(map.get(3));
                        rst.add(mo);

                    }

                    @Override
                    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                        //数据读取完毕
                        //System.out.println("数据读取完毕");
                    }
                });
                //创建读取器
                //ExcelReader reader = readerBuilder.build();
                //读取数据
                //reader.readAll();
                curBuild.build().read(rs);
                //er.read(rs);


            }

            //读取完毕
            er.finish();

            pw.println("[");
            for(int i=0;i<rst.size();i++) {
                MethodOperation mo=rst.get(i);
                pw.print(new Gson().toJson(mo) );
                if(i!=rst.size()-1) {
                    pw.println(",");
                }else{
                    pw.println();
                }
            }
            pw.println("]");
            pw.close();


            StringBuffer json=new StringBuffer();
            String tmp=null;
            BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(writePath),"UTF-8"));
            while((tmp=br.readLine())!=null){
                json.append(tmp);
            }
            br.close();
            List<MethodOperation> methods=new Gson().fromJson(json.toString(),new TypeToken<ArrayList<MethodOperation>>(){}.getType());
            System.out.println(methods.size());
            for(MethodOperation mo:methods){
                try {
                    if (mo.getUrl().contains("getAllType")) {
                        System.out.println("in");
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
            }

        }
    }

    @Data
    static class MethodOperation{
        private String system;
        private String url;
        private String method;
        private String operName;
    }

}


引用pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.2</version>
</dependency>

<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>


<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.7</version>
</dependency>

文/程忠 浏览次数:0次   2023-09-20 17:50:59

相关阅读


评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑