H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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配置访问不到,为什么会这样?

回答:

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

回答:

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

本文地址:H5W3 » SpringBoot中WEB工程使用xml配置SimpleUrlHandlerMapping不生效吗?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址