首页 > 其他分享 >统计项目中所有的Controller接口并导出

统计项目中所有的Controller接口并导出

时间:2024-10-30 09:22:07浏览次数:1  
标签:web String writer 导出 springframework Controller 接口 org import

package com.example.mock.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.WebApplicationContext;
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.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

@RestController
public class TestController {

    @Autowired
    private WebApplicationContext applicationContext;

    @ResponseBody
    @RequestMapping(value = "/getAllUrl", method = RequestMethod.GET)
    public Object getAllUrl() throws IOException {
        StringBuffer bf = new StringBuffer();
        RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
        // 获取url与类和方法的对应信息
        Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();

        List<String[]> dataList = new ArrayList<>();
        for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {
            RequestMappingInfo info = m.getKey();
            HandlerMethod method = m.getValue();

            Set<RequestMethod> methodSet = info.getMethodsCondition().getMethods();
            Set<String> patternsSet = info.getPatternsCondition().getPatterns();

            if (methodSet.size() > 0 && patternsSet.size() > 0) {
                String type = String.valueOf(methodSet.toArray()[0]);
                String url = String.valueOf(patternsSet.toArray()[0]);
                String className = method.getMethod().getDeclaringClass().getName();
                String methodName = method.getMethod().getName();

                dataList.add(new String[]{type, url, className, methodName});
            }
        }
        String[] headers = new String[]{"请求方式", "接口路径", "后端类", "后端方法名"};
        writeToCSV(dataList, "d://" + System.currentTimeMillis() + ".csv", headers);

        return dataList;
    }


    /**
     * 将数据写入CSV文件
     *
     * @param dataList 要写入的数据列表,每个元素是一个字符串数组,表示一行数据
     * @param filePath CSV文件的路径
     * @param headers  CSV文件的列标题,也是一个字符串数组
     * @throws IOException 如果在写入过程中发生文件写入错误
     */
    public static void writeToCSV(List<String[]> dataList, String filePath, String[] headers) throws IOException {
        try (FileWriter writer = new FileWriter(filePath)) {
            // 写入列标题
            writeRow(writer, headers);

            // 写入数据行
            for (String[] row : dataList) {
                writeRow(writer, row);
            }
        }
    }

    /**
     * 写入一行数据到CSV文件
     *
     * @param writer 文件写入器
     * @param row    要写入的一行数据,是一个字符串数组
     */
    private static void writeRow(FileWriter writer, String[] row) throws IOException {
        for (int i = 0; i < row.length; i++) {
            writer.write(row[i]);
            if (i < row.length - 1) {
                writer.write(",");
            }
        }
        writer.write("\n");
    }
}

标签:web,String,writer,导出,springframework,Controller,接口,org,import
From: https://www.cnblogs.com/lovedaodao/p/18515019

相关文章

  • 面试官:Spring Boot 控制层中,@Service 可以完全替代 @Controller 吗?90% 都会答错!
    作者:毅航来源:juejin.cn/post/7393533304505204787在SpringBoot开发中,@Controller和@Service基本上是日常开发中使用的最频繁的两个注解。但你有没考虑过@Service代替@Controller注解来标注到控制层的场景?换言之,经过@Service标注的控制层能否实现将用户请求分发到服务层的功能?......
  • MAnimal Controller文档——Main
    MAnimalController动物脚本负责控制动物的所有运动逻辑。它管理所有的Animator和RigidBody参数,以及动物可以执行的所有States和Modes。MainPrinciplesAnimalController(AC)是一个动画框架控制器,支持根运动或就地动画,适用于任何生物或人形角色。它使用Rigidbody与物理世界......
  • 交换接口之SFP接口
    1、参考标准:SFPMSA(September14,2000)2、接口概述:SFPMSA规范定义的SFP接口主要针对千兆速率数据通讯如光纤通道和千兆以太网应用(gigabitratedatacomapplicationssuchasFibreChannelandGigabitEthernet);由于其较GBIC接口体积小的优势,大大减小了硬件布板面积,从......
  • D50【python 接口自动化学习】- python基础之类
    day50init方法学习日期:20241027学习目标:类--64init方法:如何为对象传递参数?学习笔记:魔术方法init方法classKlass(object):#定义初始化方法,类实例化时自动进行初始化def__init__(self,name,age):self.name=nameself.age=agede......
  • D51【python 接口自动化学习】- python基础之模块与标准库
    day51模块的导入学习日期:20241028学习目标:模块与标准库--66模块的导入:如何使用其他人编写好的代码功能?学习笔记模块的作用导入模块的方法#导入模块#方式一importos#获取当前的位置print(os.getcwd())#方式二fromosimportgetcwd#获取当前的位置pr......
  • DBeaver如何导出insert的sql数据
    前言我们在使用DBeaver连接数据库的时候,有时候需要将数据库某张表的数据全部导出,用于导入到其他的数据库。一般导出的格式有csv,也要sql语句,今天就来介绍下如何导出sql语句。这样在其他新的数据库中,就能直接执行插入了。如何操作首先,我们点击下我们要导出的数据库表,然后鼠标右击......
  • C#版的有道智云对话接口
      publicclassYoudaoTalk  {    publicstaticstringappKey="您的应用ID";//"您的应用ID";    publicstaticstringappSecret="您的应用密钥";//"您的应用密钥";     //应用名称一对一对话    //已选服务小P老师,AI......
  • 鸿蒙接口封装
    ts接口封装代码:    request.tsimportpromptfrom'@system.prompt'importhttpfrom'@ohos.net.http';exportdefault(methods:string,uri:string,params:object,success:Function)=>{consthttpRequest=http.createHttp();co......
  • 第二章:用户与操作系统的接口课后习题
    文章目录单项选择题填空题名词解释问答题单项选择题用户使用操作系统通常有3种手段,它们是终端命令、系统调用命令和。A.计算机高级指令B.作业控制语言C.宏命令D.汇编语言答案:B.作业控制语言解释:作业控制语言是用户用来控制作业执行的高级语言,而宏命令......
  • springboot:调用接口返回的数据乱码解决
    从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的application/json,而是application/x-jackson-smile,所以要通过改变数据类型解决问题通过在接......