Spring Boot如何记录多路径GET接口的实际访问URL?
如何记录Spring接口实际访问的路径(多映射场景)
针对你定义的多路径映射接口,有两种常用方式获取并记录实际访问的路径:
方法一:直接注入HttpServletRequest到方法参数
在接口方法中添加HttpServletRequest参数,调用其getRequestURI()方法即可获取实际访问的路径:
@GetMapping(value = {"/foo", "/bar"}) public String myFunction(HttpServletRequest request) { String actualPath = request.getRequestURI(); // 记录实际访问路径 System.out.println("实际访问路径:" + actualPath); // 后续业务逻辑 return "success"; }
getRequestURI()会返回请求的完整路径(如/foo或/bar),适用于大多数常规场景。
方法二:通过RequestContextHolder获取请求上下文
如果不想在方法参数中添加HttpServletRequest,可以借助Spring的RequestContextHolder获取当前请求上下文,进而拿到请求对象:
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; @GetMapping(value = {"/foo", "/bar"}) public String myFunction() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes != null) { HttpServletRequest request = attributes.getRequest(); String actualPath = request.getRequestURI(); // 记录实际访问路径 System.out.println("实际访问路径:" + actualPath); } // 后续业务逻辑 return "success"; }
注意:此方式需确保当前线程为请求处理线程,否则getRequestAttributes()可能返回null,适合需要在工具类或非控制器方法中获取路径的场景。
内容的提问来源于stack exchange,提问作者Mankind1023
相关产品推荐
相关产品推荐

