如何获取Micronaut中当前路径的*模式*?

问题描述 投票:0回答:1

我已经使用 Micronaut 3.10 启动并运行了 REST API 服务,并且正在创建仪表板以查看每个端点获得的流量。

目前我们像这样记录每个请求路径:

@Filter("/**")
@Slf4j
public class LoggingInterceptor implements HttpServerFilter {
  @Override
  public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request,
                                                    ServerFilterChain chain) {
    log.atInfo().addKeyValue("path", request.getPath());
  }
}

当每个请求的路径都相同时,这非常有效,例如:

GET /api/users

在日志记录仪表板中,我可以按上述路径对请求进行分组,它将完全匹配到达该端点的请求数量。

但是当路径中有路径参数时,比如这样:

GET /api/users/{userId}

然后按记录的请求路径进行分组就没那么有用了,因为每个实际请求如下所示:

GET /api/users/UserId123
GET /api/users/UserId234
GET /api/users/UserId345
...

因此,在按请求路径对日志进行分组的仪表板中,似乎我有数百个对路径

/api/users
的请求,但只有 1-2 个对数百个不同路径(例如
/api/users/UserId123
/api/users/UserId234
)的请求。理想情况下,我可以将它们全部分组到
/api/users/{userId}
下。

我的实际问题:

有没有办法使用

{userId}
而不是
UserId123
从请求中获取路径?
对于此目的,查看 Micronaut 将当前请求解析到的控制器的 通配符路径是什么会非常有用,而不是请求的实际 URL 路径。这可能吗?

java logging micronaut
1个回答
0
投票

这是您要找的吗?

 String str = request.getAttribute(HttpAttributes.ROUTE_INFO,String.class).get();
 System.out.println(str);

O/P:GET /api/users/{id} -> MyController#delete (application/json)

© www.soinside.com 2019 - 2024. All rights reserved.