我已经使用 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 路径。这可能吗?
这是您要找的吗?
String str = request.getAttribute(HttpAttributes.ROUTE_INFO,String.class).get();
System.out.println(str);
O/P:GET /api/users/{id} -> MyController#delete (application/json)