SpringBoot中WEB工程使用xml配置SimpleUrlHandlerMapping不生效吗?

由于项目大,web接口非常多,用注解的方式根本没办法管理,所以一定要用xml配置来搭建SpringBoot的工程,但是遇到下面问题

我在启动类中使用
@ImportResource("classpath:META-INF/spring/application.xml")
加载了xml配置,配置中的bean都可以生效

<bean id="publicRequestMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="login.do">LoginAction</prop>
            </props>
        </property>
    </bean>

日志中打印如下:

o.a.c.c.C.[Tomcat].[localhost].[/ab]     : Initializing Spring embedded WebApplicationContext
o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/login.do] onto handler 'LoginAction' 

但是在浏览器中访问 /ab/login.do 却返回一个SpringBoot的错误页面提示404

如果使用@RestController注解的方式,可以正常访问,上面的xml配置访问不到,为什么会这样?

阅读 5.1k
2 个回答
新手上路,请多包涵

你好,请问这个问题解决了吗?我今天也遇到了,弄了一天也没弄好

新手上路,请多包涵

这问题百度排名还挺高,但是没人回答,那我来说下吧,其实很简单,看下源码就了解了。
当你自定义SimpleUrlHandlerMapping的时候,默认优先级是最低的,所以会放在最后执行,但是,springboot上还有一个SimpleUrlHandlerMapping,里边会处理/**请求,而偏偏这个SimpleUrlHandlerMapping在你的SimpleUrlHandlerMapping前边,所以,肯定不会到达你这个SimpleUrlHandlerMapping了。。。
解决办法就是:
调用SimpleUrlHandlerMapping.setOrder(int)方法,提高优先级,目前我设置为5,正好在拦截/**的SimpleUrlHandlerMapping前边,但是不好说那天spring改了,5就不好使了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题