加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何确定给定URL的控制器(spring)

发布时间:2020-12-15 08:30:24 所属栏目:Java 来源:网络整理
导读:使用 spring DefaultAnnotationHandlerMapping如何查找最终将处理给定URL的Controller. 我目前有这个,但感觉应该比迭代100多个请求映射更清晰: public static Object getControllerForAction(String actionURL) { ApplicationContext context = getApplicat
使用 spring DefaultAnnotationHandlerMapping如何查找最终将处理给定URL的Controller.

我目前有这个,但感觉应该比迭代100多个请求映射更清晰:

public static Object getControllerForAction(String actionURL) {
    ApplicationContext context = getApplicationContext();
    AnnotationHandlerMapping mapping = (AnnotationHandlerMapping) context.getBean("annotationMapper");
    PathMatcher pathMatcher = mapping.getPathMatcher();
    for (Object key: mapping.getHandlerMap().keySet()) {
        if (pathMatcher.match((String) key,actionURL)){
            return mapping.getHandlerMap().get(key);
        }
    }
    return null;
}

解决方法

出于此问题的目的,DefaultAnnotationHandlerMapping及其超类中的所有有趣方法都受到保护,因此外部代码不可见.但是,编写DefaultAnnotationHandlerMapping的自定义子类会覆盖这些方法并使它们公开,这将是微不足道的.

既然你需要能够提供路径而不是请求对象,我建议使用AbstractUrlHandlerMapping的lookupHandler作为一个很好的候选者.它仍然需要你为它提供一个请求对象以及路径,但是该请求对象仅用于传递给validateHandler()方法,该方法什么都不做,所以你可能在那里提供null.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读