【问题标题】:is default handler mapping is overridden when we create custom handler mapping in spring mvc?当我们在 spring mvc 中创建自定义处理程序映射时,是否会覆盖默认处理程序映射?
【发布时间】:2014-10-28 18:44:29
【问题描述】:

如果我们创建自定义处理程序映射,我想知道 spring mvc 框架覆盖创建的默认处理程序映射。我有疑问,因为我在一个项目中的两个项目中创建了自定义处理程序映射

  1. BeanNameHandlerMapping
  2. SimpleUrlHandlerMapping 被注入到调度器 servlet 中,但在另一个未在调度器 servlet 中注册

我为这两个项目使用不同版本的 spring 3 框架。是不是因为spring 3的版本变化

我没有在 spring 3.0 中获取默认处理程序映射,而是在 spring 3 更高版本中获取

谢谢

【问题讨论】:

    标签: java spring spring-mvc model-view-controller


    【解决方案1】:

    将您的自定义HandlerMappingorder 指定为具有最低的int 值,以便首先尝试它而不是其他已注册的HandlerMappings。

    说明

    找出 Web 上下文中可用的 HandlerMapping 是 DispatcherServlet 初始化的一部分:

    该方法正在发现所有已注册的HandlerMappings,并且您可以看到它正在根据它们定义的顺序对它们进行排序

    否则它将退回到默认的 handlerMapping:BeanNameUrlHandlerMapping

    【讨论】:

    • 是的 initHandlerMapping(context) 方法发现所有处理程序映射并注册它们。我的问题是如果我创建一个自定义 HandlerMapping(比如 MyCustomMapping)并指定最低顺序以便首先尝试它,然后所有默认映射 BeanNameUrlHandlerMapping 或其他默认映射是否注册? @dismitrisli
    • @yoga:再看上面的代码就可以找到答案了。只有一个默认的 HandlerMapping,即 BeanNameUrlHandlerMapping,并且仅当 DispatcherServlet 在上下文中找不到任何显式注册的 HandlerMapping(如您的自定义处理程序映射)时才注册它。因此,如果您定义 any 处理程序映射/映射,这些将是根据顺序使用的,没有默认值。
    • 是的,我也在考虑这一点,但在我的一个项目中,我定义了我的自定义映射,但默认映射 BeanNameUrlHandlerMapping 也已注册,我通过将调试点放在上述方法上进行了检查。但在另一个项目中它没有注册。正如我在第一个问题中提到的那样,只有春季版本不同
    • @yoga:即使是这样,您的自定义处理程序映射不是以较低的顺序被拾取吗?如果以前的 Spring 版本行为不同,则在任何情况下都注册默认值时,它应该在代码中可见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多