开发者社区> 问答> 正文

求助springmvc rest路径映射问题?报错

web.xml配置

<servlet>
     <servlet-name>cms</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/smcms-servlet.xml</param-value>
  </init-param>
     <load-on-startup>1</load-on-startup>
    </servlet>   

 <servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>/my/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>cms</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>*.do</url-pattern>
    </servlet-mapping>

 

action 代码

@RequestMapping(value="/my/{userName}",method=RequestMethod.GET)
 public ModelAndView index(HttpServletRequest request,HttpServletResponse response,@PathVariable("userName")String userName) throws Exception{
  this.log.info("member index!");
  ModelAndView mav = new ModelAndView("member/index");
  return mav; 

 }

 

请求URL:http://localhost:8080/smcms/my/sysadmin

后台报:2013-12-27 11:26:23 org.springframework.web.servlet.DispatcherServlet noHandlerFound
警告: No mapping found for HTTP request with URI [/smcms/my/sysadmin] in DispatcherServlet with name 'cms'

一直想不明白为啥我这个请求URL,找不到映射?

当我把web.xml中的映射改成下面:

<servlet-mapping>
       <servlet-name>cms</servlet-name>
       <url-pattern>/</url-pattern>
    </servlet-mapping>就是可以的,但是这样的话,所有请求都会被拦截器拦截,包括js,css,image之类的。所以请大家看下上面的只拦截/my/*,.html,*.do为啥报错?

展开
收起
爱吃鱼的程序员 2020-06-22 13:38:28 483 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    <servlet-mapping>
          <servlet-name>cms</servlet-name>
          <url-pattern>/my/*</url-pattern>

       </servlet-mapping>,

    你的配置文件中已经映射/my到这个路径,你这个时候的访问路径已经是http://localhost:8080/ cms/my,

    @RequestMapping(value="/my/{userName}你的请求路径中你又配置了一次。如果你想访问到它,应该是在前面配置的路径 http://localhost:8080/ cms/my再加上 /my/{userName},即 http://localhost:8080/ cms/my/my/{userName}。

    谢谢分享!回答的很好 mvc:resource<mvc:resourcesmapping="/css/**"location="/css/"/>
     <mvc:resourcesmapping="/images/**"location="/images/"/>
     <mvc:resourcesmapping="/js/**"location="/js/"/>这个我也使用了。但是还是会把静态资源还是会被SPRING的拦截器给拦截。

    URI[/smcms/my/sysadmin]smcms是你的工程名字吧,运行之前可以设置下Context,路径不要带工程名应该能解决找不到映射的问题

    你设置的是

    /my/*

    表示会拦截/my/sysadmin

    那么你的@RequestMappingurl应该匹配这里的*号,不带/my

    比如你这里的应该配成: @RequestMapping(value=“/{userName}")

    虽然你的/smcms/my/sysadmin 会找到这个action方法,但是你的userName是获取不到的,应为这不是rest的url。你还是重新设计一下resturl吧

    哦。吼吼。感谢各位大神。@ never_say  ,@ hao123.com  ,你们说的都对。请教了另一位spring大神,他指导加上: <beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <propertyname="alwaysUseFullPath"value="true"></property> 
     </bean>
    这样也是可以的。呵呵。灰常感谢谢。长知识了,这个配置我也没见过

    @RequestMapping(value="/my/{userName}",method=RequestMethod.GET)这个

    对应rest地址应该为 http://localhost:8080/smcms/my/my/sysadmin,如果想映射成 http://localhost:8080/smcms/my/sysadmin,就得改成 @RequestMapping(value="/{userName}",method=RequestMethod.GET)

    这样不行的,看我之前的回复
    2020-06-22 13:38:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载