首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取spring拦截器中的请求映射对象,以获取实际的url字符串模式

获取spring拦截器中的请求映射对象,以获取实际的url字符串模式
EN

Stack Overflow用户
提问于 2018-07-16 05:19:05
回答 2查看 5.1K关注 0票数 6

这可能很难解释为什么,但我遇到了这种情况,我需要获取当前请求的url的请求url映射字符串。

代码语言:javascript
复制
Like if I have a GET URL as "/Test/x/{number}" 
I want to get "/Test/x/{number}" not "/Test/x/1"

我能在拦截器中得到实际声明的url字符串吗?

如果这是可能的,我如何才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-16 06:58:21

您可以实现一个HanderInterceptor来拦截、预处理或后处理、请求和内省被调用的方法。

代码语言:javascript
复制
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

你可以添加更多的逻辑来内省某些方法,某些类型的请求等等。

票数 7
EN

Stack Overflow用户

发布于 2018-07-16 05:41:32

我认为你可以通过反射和@RequestMapping anotations来获得它。例如,当您使用@RequestMapping(value = "/Test/x/{number}",method = RequestMethod.GET)

这个值就是你想要的,如果我没弄错的话!

您只需找到控制器类类型。我认为这是可能的,但我没有测试它。

请检查以下内容:

In a Spring-mvc interceptor, how can I access to the handler controller method?

首先,如果HandlerMethod是正确的,它可能会得到解决,但是如果你得到了强制转换错误,那么你必须得到控制器类,我认为。当您获得控制器类时,您可以使用@RequestMapping注释查找方法。

所以

1-查找控制器类类型

2-通过反射搜索类中的所有方法

3-使用指定的url和指定的方法GET / POST检查方法注释

4-选择最佳候选人

如果你有两个以上的URL参数,这个方法就不好了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51352320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档