gpt4 book ai didi

java - 获取已命中的URL模板

转载 作者:行者123 更新时间:2023-12-02 09:39:08 26 4
gpt4 key购买 nike

我有一个带有多个API的Spring MVC Controller ,我想获取前端已命中的API的URI

我有一个扩展了oncePerRequestFilter的过滤器,它拦截每个api调用,该过滤器具有接受HttpServletRequest、HttpServletResponse和filterChain的方法。我可以使用 request.getRequestURI() 获取 uri,但如果 uri 具有模板路径变量,可以说 uri ="q/v1/ruleset/{rulesetId}"我正在获取最终的 uri,例如 API 已被 rulesetid=23 命中,我从 request.getRequestURI() 获取的 uri 是“q/v1/ruleset/23”但我想要的是uri ="q/v1/ruleset/{rulesetId}",有没有什么方法可以得到预期的结果,我知道,我总是可以通过一些操作得到想要的结果,但我想让这些东西通用,请帮助

我有包含 API 的 Controller

    @RequestMapping(value = "/ruleset/{rulesetid}", method = 
RequestMethod.GET)
public RuleSet getRuleSet(@PathVariable(value = "rulesetid")
final Long ruleSetId) {
return storeMixin.getRuleSet(ruleSetId);
}

过滤

    @Component
@Order(1)
public class CatalogFilter extends OncePerRequestFilter {


@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,FilterChain filterChain) throws
IOException, ServletException {


long startTime = System.currentTimeMillis();
filterChain.doFilter(request, response);
long elapsed = System.currentTimeMillis() - startTime;
String name = request.getRequestURI();
String requestType = request.getMethod();


Integer httpCode = response.getStatus();

}

}

最佳答案

您将无法在过滤器中执行此操作,因为过滤器是在处理程序之前执行的。

您可以实现 HandlerInterceptor 并获取如下所示的路径映射

public class LogInterceptor implements HandlerInterceptor {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
String path = (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
System.out.println("path : " + path);
return true;
}
}

关于java - 获取已命中的URL模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57241214/

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