gpt4 book ai didi

java - 访问@RequestMapping映射的参数进行跟踪

转载 作者:行者123 更新时间:2023-11-30 06:37:40 24 4
gpt4 key购买 nike

我目前正在使用 Spring Cloud Sleuth 开发一个监控应用程序。目前,我尝试收集尽可能多的有关我的请求的信息。

为了使该方法尽可能具有可扩展性,我使用 GenericFilterBeansHandlerInterceptorAdapter 来访问发送到 REST-API 的请求中的信息。

我正在努力获取 REST 调用的参数,其中参数是从 URL 映射的,如以下代码片段所示:

  @RequestMapping(
value = {"/{service}/{route_id}/book", "/accounting-core-service/{service}/{route_id}/book"},
method = RequestMethod.GET)
@ResponseBody
public ModelAndView book(@PathVariable(value="service") String serviceName,
@PathVariable(value = "route_id") int routeId,
HttpServletResponse response) {
/*Do something*/
}

问题不在于这样写是否是好的做法。问题是是否有类似于 Filter 或 Interceptor 的方法(或正确使用它们)来访问这些参数。

一个要求是,通过添加很少的代码行就可以轻松地将其应用于应用程序。手动注释每个方法调用或手动插入代码以从方法内将参数写入跟踪对我来说是不可行的。

如果您需要更多信息,请随时询问。我将为您提供帮助我解决问题所需的所有信息。

最佳答案

虽然没有得到官方支持(因为它没有写在引用文档中),但 Spring MVC 将该信息保存为请求属性。

您可以创建自己的 HandlerInterceptor,在 Sleuth 后面订购,并从请求中获取该信息,如下所示:

// "/{service}/{route_id}/book"
String matchingPattern = (String) request
.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
// "service" => "fooService", "route_id" => "42"
Map<String, String> templateVariables = (Map<String, String>) request
.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

请注意,模板变量此时已经解码,这可能正是您想要的。

关于java - 访问@RequestMapping映射的参数进行跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44946043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com