You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:52:35