如何通过SpringBoot获取Java中所有接口的路由映射详情?

2026-05-20 21:191阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计653个文字,预计阅读时间需要3分钟。

如何通过SpringBoot获取Java中所有接口的路由映射详情?

重要:版本非常重要,先说明一下版本。

版本不一致,可能获取的结果也不一样。

Spring Boot 2.7.7Java 1.8定义一个查看路由的数据结构package com.example.demo.entity;

import lombok.Data;import org.springframework.stereotype.Component;

如何通过SpringBoot获取Java中所有接口的路由映射详情?

重要:版本很重要,先说一下版本,版本不一样,可能获取结果也不一样

spring-boot 2.7.7 java 1.8

定义一个查看路由的数据结构

package com.example.demo.entity; import lombok.Data; import org.springframework.web.bind.annotation.RequestMethod; import java.util.Set; @Data public class Route { /** * 类名 */ private String className; /** * 方法名 */ private String methodName; /** * 匹配规则 */ private Set<String> patterns; /** * 请求方式 GET/POST */ private Set<RequestMethod> methods; }

获取SpringBoot路由映射关系

package com.example.demo.config; import com.example.demo.entity.Route; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition; import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.util.pattern.PathPattern; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 获取SpringBoot路由映射关系 */ @Component public class RouteConfig { @Autowired private WebApplicationContext applicationContext; /** * 获取所有路由映射关系 * * @return */ public List<Route> getAllRouteMapping() { RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); // 获取url与类和方法的对应信息 Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods(); List<Route> list = new ArrayList<>(); // 遍历 for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : map.entrySet()) { Route route = this.getRoute(entry); list.add(route); } return list; } /** * 获取路由对象 * * @return */ public Route getRoute(Map.Entry<RequestMappingInfo, HandlerMethod> entry) { Route route = new Route(); RequestMappingInfo info = entry.getKey(); // 请求路径 PathPatternsRequestCondition requestCondition = info.getPathPatternsCondition(); if (requestCondition != null) { Set<PathPattern> patterns = requestCondition.getPatterns(); if (patterns != null) { route.setPatterns(patterns .stream() .map(PathPattern::getPatternString) .collect(Collectors.toSet())); } } // 请求方法 RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition(); if (methodsCondition != null) { route.setMethods(methodsCondition.getMethods()); } HandlerMethod method = entry.getValue(); // 类名 route.setClassName(method.getMethod().getDeclaringClass().getName()); // 方法名 route.setMethodName(method.getMethod().getName()); return route; } }

通过控制器输出路由映射数据

package com.example.demo.controller; import com.example.demo.config.RouteConfig; import com.example.demo.entity.Route; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/api") public class AppIndexController { @Autowired private RouteConfig routeConfig; @GetMapping("/route") public List<Route> route() { return routeConfig.getAllRouteMapping(); } }

访问路径:localhost:8080/api/route

输出数据如下

[ { "className": "org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController", "methodName": "errorHtml", "patterns": [ "/error" ], "methods": [] }, { "className": "org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController", "methodName": "error", "patterns": [ "/error" ], "methods": [] }, { "className": "com.example.demo.controller.AppIndexController", "methodName": "route", "patterns": [ "/api/route" ], "methods": [ "GET" ] } ]

参考

  • SpringBoot获取所有接口的路由
标签:路由

本文共计653个文字,预计阅读时间需要3分钟。

如何通过SpringBoot获取Java中所有接口的路由映射详情?

重要:版本非常重要,先说明一下版本。

版本不一致,可能获取的结果也不一样。

Spring Boot 2.7.7Java 1.8定义一个查看路由的数据结构package com.example.demo.entity;

import lombok.Data;import org.springframework.stereotype.Component;

如何通过SpringBoot获取Java中所有接口的路由映射详情?

重要:版本很重要,先说一下版本,版本不一样,可能获取结果也不一样

spring-boot 2.7.7 java 1.8

定义一个查看路由的数据结构

package com.example.demo.entity; import lombok.Data; import org.springframework.web.bind.annotation.RequestMethod; import java.util.Set; @Data public class Route { /** * 类名 */ private String className; /** * 方法名 */ private String methodName; /** * 匹配规则 */ private Set<String> patterns; /** * 请求方式 GET/POST */ private Set<RequestMethod> methods; }

获取SpringBoot路由映射关系

package com.example.demo.config; import com.example.demo.entity.Route; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition; import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.util.pattern.PathPattern; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 获取SpringBoot路由映射关系 */ @Component public class RouteConfig { @Autowired private WebApplicationContext applicationContext; /** * 获取所有路由映射关系 * * @return */ public List<Route> getAllRouteMapping() { RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); // 获取url与类和方法的对应信息 Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods(); List<Route> list = new ArrayList<>(); // 遍历 for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : map.entrySet()) { Route route = this.getRoute(entry); list.add(route); } return list; } /** * 获取路由对象 * * @return */ public Route getRoute(Map.Entry<RequestMappingInfo, HandlerMethod> entry) { Route route = new Route(); RequestMappingInfo info = entry.getKey(); // 请求路径 PathPatternsRequestCondition requestCondition = info.getPathPatternsCondition(); if (requestCondition != null) { Set<PathPattern> patterns = requestCondition.getPatterns(); if (patterns != null) { route.setPatterns(patterns .stream() .map(PathPattern::getPatternString) .collect(Collectors.toSet())); } } // 请求方法 RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition(); if (methodsCondition != null) { route.setMethods(methodsCondition.getMethods()); } HandlerMethod method = entry.getValue(); // 类名 route.setClassName(method.getMethod().getDeclaringClass().getName()); // 方法名 route.setMethodName(method.getMethod().getName()); return route; } }

通过控制器输出路由映射数据

package com.example.demo.controller; import com.example.demo.config.RouteConfig; import com.example.demo.entity.Route; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/api") public class AppIndexController { @Autowired private RouteConfig routeConfig; @GetMapping("/route") public List<Route> route() { return routeConfig.getAllRouteMapping(); } }

访问路径:localhost:8080/api/route

输出数据如下

[ { "className": "org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController", "methodName": "errorHtml", "patterns": [ "/error" ], "methods": [] }, { "className": "org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController", "methodName": "error", "patterns": [ "/error" ], "methods": [] }, { "className": "com.example.demo.controller.AppIndexController", "methodName": "route", "patterns": [ "/api/route" ], "methods": [ "GET" ] } ]

参考

  • SpringBoot获取所有接口的路由
标签:路由