今天在做一个SSM实战项目的时候,遇到了个处理器方法与静态资源之间的问题。以下先贴出问题产生的背景,并给出问题以及出现原因与解决办法:
-
静态资源目录
-
后台处理器Controller的路径设置
-
出现的问题
当我在后台添加一个RESTful风格的处理器方法并重启项目时,发现跳转不了doctor/index.html这个页面,报错400。
-
然后检查半天没有一点发现(很是抓狂!),最后的最后发现后台出现了一个WARNING!
意思是,这个问题在于字符串String在转换成Integer的时候出现了转换异常!可是,我没有发送处理请求呀?只是跳转了doctor包下的index页面。然后好像有点点懵懵懂懂的感觉到问题的所在,我请求跳转的index.html这个页面没有去找静态资源下的页面,而是去访问了处理器,而且WARNING也提到了输入的字符串是index!!!为了验证,我在后台改成String接收,并打印请求路径发现!就是index.html,我的感觉没错!
-
解决办法
然后把静态资源文件改了个名称,重启项目之后发现没问题了!
-
为什么会出现这个问题?
在解决完了这个问题之后,还是有个疑问,就是为什么会出现这个问题,难道是静态资源没处理?明明已经做了静态资源的处理了啊(如下图),而且在没加queryById这个方法之前也没出现过这个错,那就不该是静态资源的问题呀?
想了很久,也百度了很久,最后的最后找到了一个大佬的解惑:
当配置了@Controller,@RequestMapping,以及静态资源后,可以通过 .html 、.do、.action的路径后缀来进行访问,如果配置了静态资源,此时如果重名(如.html),那么系统会首先查找@RequestMapping,如果找不到,再从静态资源中查找。