SpringBoot项目快速打印controller类的URL

  1. 创建一个配置类,实现WebMvcConfigurer接口,并重写addInterceptors方法来注册一个自定义的RequestMappingHandlerMapping

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.List;/*** @date 2024/4/12 14:52*/
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Autowiredprivate ControllerUrlPrintingInterceptor controllerUrlPrintingInterceptor;@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {}@Overridepublic void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}@Overridepublic void configureAsyncSupport(AsyncSupportConfigurer configurer) {}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}@Overridepublic void addFormatters(FormatterRegistry registry) {}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(controllerUrlPrintingInterceptor).addPathPatterns("/**");}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {}@Overridepublic void addCorsMappings(CorsRegistry registry) {}@Overridepublic void addViewControllers(ViewControllerRegistry registry) {}@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {}@Overridepublic void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}@Overridepublic void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}@Overridepublic Validator getValidator() {return null;}@Overridepublic MessageCodesResolver getMessageCodesResolver() {return null;}
}

2. 创建一个拦截器类ControllerUrlPrintingInterceptor,实现HandlerInterceptor接口,并重写preHandle方法。


import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @date 2024/4/12 14:49*/
@Component
public class ControllerUrlPrintingInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {}
}

3.在StartupControllerUrlPrinter中,我们通过RequestMappingHandlerMapping获取所有的URL和对应的处理器映射,然后打印出来。


import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;/*** @date 2024/4/12 14:54*/
public class StartupControllerUrlPrinter implements ApplicationListener<ContextRefreshedEvent> {private final RequestMappingHandlerMapping handlerMapping;public StartupControllerUrlPrinter(RequestMappingHandlerMapping handlerMapping) {this.handlerMapping = handlerMapping;}@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {handlerMapping.getHandlerMethods().forEach((key, value) -> System.out.println(key));}
}

4.写一个配置类,将StartupControllerUrlPrinter在启动时注册


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;/*** @date 2024/4/12 14:55*/
@Configuration
public class AppConfig {@Beanpublic StartupControllerUrlPrinter startupControllerUrlPrinter(RequestMappingHandlerMapping handlerMapping) {return new StartupControllerUrlPrinter(handlerMapping);}
}

 这样,当 Spring Boot 应用启动时,就会打印出所有的 Controller URL 地址,帮助你快速了解应用的路由配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD-C卷-小明找位置[100分]

题目描述 小朋友出操,按学号从小到大排成一列; 小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。 算法复杂度:不高于 nlog(n); 学号为整数类型,队列规模 ≤ 10000; 输入描述 第一行:输入已排成队列的小朋友的学号(正整数),以空格隔开;例如: 93 9…

springboot项目关闭swagger防止漏洞扫描

为了应对安全扫描&#xff0c;再生产环境下关闭swagger ui 1、项目中关闭swagger 在这里用的是config配置文件的方式关闭的 Configuration EnableSwagger2 public class SwaggerConfig implements WebMvcConfigurer {Value("${swagger.enable}")private Boolean e…

【项目实战】记录一次PG数据库迁移至GaussDB测试(上)

目录 一、说明 1.1、参考文档 1.2、注意事项 1.3、环境基本情况 二、GaussDB新环境安装 2.1 配置操作环境变量 2.1.1 关闭防火墙 步骤1 执行以下命令&#xff0c;检查防火墙是否关闭。 步骤2 执行以下命令&#xff0c;关闭防火墙并禁止开机启动。 步骤3 修改/etc/sel…

Django序列化常用字段与参数

Django序列化常用字段与参数 目录 Django序列化常用字段与参数序列化常见字段序列化常见参数 序列化常见字段 字段含义字段构造方式BooleanField布尔值判断(True/False)BooleanField()NullBooleanField布尔值判断(可以为Null)NullBooleanField()CharField文本字符串CharField(…

MySQL 中datatime 与 timestamp区别

在 MySQL 中&#xff0c;DATETIME 和 TIMESTAMP 是两种用于存储日期和时间的数据类型&#xff0c;它们有以下区别&#xff1a; 存储范围&#xff1a; DATETIME&#xff1a;存储的日期和时间范围从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。TIMESTAMP&#xff1a;存…

单细胞RNA测序(scRNA-seq)Cellranger流程入门和数据质控

单细胞RNA测序(scRNA-seq)Cellranger流程入门和数据质控 单细胞RNA测序(scRNA-seq)基础知识可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与扩增 1. 单细胞RNA-seq样本数据说明 样本数据来源文章:Acquired cancer re…

【计算机毕业设计】基于微信小程序的开发项目150套(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享200的微信小程序毕业设计&#xff0c;后台用Java开发&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设…

1.点亮第一个LED

#include "reg52.h" sbit LED1P2^0; //将P2.0管脚定义为LED1void main() { LED10; //LED1端口设置为低电平 while(1) { } } 接线说明 为了使LED灯能够正常工作&#xff0c;需要将其正确地连接到单片机的某个输出端口。在这…

【运维笔记】负载均衡的原理与算法——以Nginx为例

一、负载均衡的定义及其重要性 负载均衡是一种广泛应用于数据中心和云计算环境的技术&#xff0c;它能够将工作负载均匀地分配到服务器集群中的多个服务器上。这一技术的核心目的是优化资源利用率&#xff0c;提高服务可靠性&#xff0c;降低响应时间&#xff0c;从而保障网络…

linux c多进程通信之共享内存和信号量

编译环境&#xff1a;Ubuntu16.04 64位 交叉编译工具&#xff1a;arm-hisiv500-linux-gcc 文章目录 1. 项目背景2. 涉及的函数3. 头文件JShm.h4. 类的实现5. sample代码 1. 项目背景 最近项目中需要用到共享内存的交互&#xff0c;取走旧数据&#xff0c;取数据不及时写入覆盖…

MQ概览及Kafka详解

文章目录 概览MQ优点MQ缺点常见MQ对比JMS消息模型点对点模式发布订阅模式 kafka基础架构发布订阅工作流程生产者生产者文件存储生产者分区策略生产者数据可靠性保证生产者数据一致性保证生产者ack机制ExactlyOnce生产者发送消息流程 消费者消费者分区分配策略消费者消费数据问题…

算法设计与分析实验报告c++实现(TSP问题、哈夫曼编码问题、顾客安排问题、最小生成树问题、图着色问题)

一、实验目的 1&#xff0e;加深学生对贪心算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用贪心算…

streamlit 大模型前段界面

结合 langchain 一起使用的工具&#xff0c;可以显示 web 界面 pip install streamlit duckduckgo-search 运行命令 streamlit run D:\Python_project\NLP\大模型学习\test.py import os from dotenv import load_dotenv from langchain_community.llms import Tongyi load…

基于springboot的大学城水电管理系统源码数据库

基于springboot的大学城水电管理系统源码数据库 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大学城水电管理系统的开发全过程。通过分析大学城水电管理系统管理的不足&#xff0c;创建了一个计算机管理大学城水…

matlab学习002-函数及流程控制语句

目录 一&#xff0c;matlab编程基础 1&#xff09;matlab脚本和函数文件 ①脚本文件 ②函数文件 2&#xff09;函数的定义和调用 ①定义 ②调用 3&#xff09;程序流程控制 ①使用for求 122^2……2^622^63之和 ②使用while语句求122^2……2^622^63之和 ③使用matl…

Python学习(三)

函数扩展 多返回值 参数扩展 位置参数 注意:传递的参数和定义的参数的顺序及个数必须一致 关键字参数 关键字名称必须和形参名称相同&#xff0c;形参叫name&#xff0c;那么关键字也要写name 不定长参数 缺省参数

C语言奇技淫巧之--“函数指针数组”的类型定义与结构化初始化某一个函数

精力有限&#xff0c;就不写前言后序了&#xff0c;懂的都懂&#xff0c;直接上代码。 快速回忆点&#xff1a; # 类型定义 typedef int (*my_func_t)(int a, void *b)# 函数指针数组结构体定义 struct my_ops {int (*func[FUNC_TYPE_MAX])(int a, void *b); };# 函数指针数组…

Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】

针对集合排序&#xff0c;java8可以用Stream流的sorted()进行排序。 示例Bean 以下我们会使用这个Bean来做示例。 public class Order {private String weight;private Double price;private String dateStr;//忽略getter、setter、构造方法、toString }字段排序 首先是比较器…

职场新员工倒挂老员工工资

职场的工资倒挂和工资构成 一个公司招新员工要开多少工资 主要取决于其他大厂出多少钱以及当年就业市场的行情。职场中常出现工资倒挂现象&#xff0c;即新员工的工资高于老员工。公司宁愿高薪招新员工而不给老员工加工资&#xff0c;主要是因为新员工的工资由市场决定&#…

【优选算法专栏】专题十:哈希表(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…