可能很难解释为什么,但是在这种情况下,我需要获取当前请求的URL的请求URL映射字符串。
Like if I have a GET URL as "/Test/x/{number}"
I want to get "/Test/x/{number}" not "/Test/x/1"
我可以在拦截器中获取实际声明的url字符串吗?
如果可能的话,我该如何实现
答案 0 :(得分:3)
您可以实现HanderInterceptor
来拦截,前置或发布,请求和自检正在调用的方法。
public class LoggingMethodInterceptor implements HandlerInterceptor {
Logger log = LoggerFactory.getLogger(LoggingMethodInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HandlerMethod method = (HandlerMethod) handler;
GetMapping mapping = method.getMethodAnnotation(GetMapping.class);
log.info("URL is {}", Arrays.toString(mapping.value()));
return true;
}
}
这将输出URL is [/hello/{placeholder}]
完整示例可在此处找到,https://github.com/Flaw101/spring-method-interceptor
您可以添加更多逻辑以仅对某些方法,某些类型的请求等进行自省。
答案 1 :(得分:0)
我认为您可以通过反射获得@RequestMapping注释。 例如当您使用 @RequestMapping(value =“ / Test / x / {number}”,方法= RequestMethod.GET)
如果我做对了,那么价值就是您要寻找的东西!
您只必须找到控制器类类型。 我想可能有,但我没有测试。
检查:
In a Spring-mvc interceptor, how can I access to the handler controller method?
首先可以解决HandlerMethod是否正确的问题,但是如果出现强制转换错误,则必须获得控制器类[我认为]。 当您获得控制器类时,您可以根据@RequestMapping注释查找方法。
所以
1-查找控制器类类型
2-通过反射搜索类中的所有方法
3-使用指定的网址和指定的方法[GET / POST]检查方法注释
4-选择最佳人选
如果您有两个以上的URL参数,则此方法不好!