如何在Micronaut中获取当前请求的路径匹配模式?
在Micronaut 3.10中获取带占位符的路由路径模式
完全可行,你可以通过Micronaut提供的RouteMatch对象获取控制器对应的路由路径模式,具体实现如下:
修改过滤器代码
在你的LoggingInterceptor中,从HttpRequest里提取路由匹配元数据,进而拿到带占位符的路径模板:
@Filter("/**") @Slf4j public class LoggingInterceptor implements HttpServerFilter { @Override public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) { // 获取请求匹配到的路由信息 Optional<RouteMatch<?>> routeMatch = request.getAttribute(HttpAttributes.ROUTE_MATCH, RouteMatch.class); // 提取带占位符的路径模式,未匹配到路由时 fallback 到实际请求路径 String pathPattern = routeMatch .map(RouteMatch::getUriRoute) .map(UriRoute::getPath) .orElse(request.getPath()); log.atInfo().addKeyValue("path_pattern", pathPattern).log("Request processed"); // 必须继续执行过滤器链,否则请求会被拦截终止 return chain.proceed(request); } }
关键说明
HttpAttributes.ROUTE_MATCH是Micronaut内置的属性键,用于从请求上下文获取路由匹配的详细信息UriRoute::getPath()返回的就是控制器定义时的原始路径模板(比如/api/users/{userId})- 增加了空值处理逻辑,避免未匹配到路由的请求出现异常
- 务必保留
chain.proceed(request)调用,保证请求能正常流转到后续处理环节
这样处理后,无论是无参数的GET /api/users还是带参数的GET /api/users/UserId123,都会记录统一的路由模板路径,完美解决同端点请求的分组统计问题。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

