【问题标题】:RequestMapping DisplatcherServlet no mapping foundRequestMapping DisplatcherServlet 未找到映射
【发布时间】:2014-05-14 23:08:49
【问题描述】:

我的 DispatcherServlet 工作不正常。

  <servlet>
    <servlet-name>userService</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/servlet/userService-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>userService</servlet-name>  
    <url-pattern>/user/*</url-pattern>
  </servlet-mapping>

控制器:

@Controller
@RequestMapping(value ="/user")
public class Controller {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public @ResponseBody List<User> getUsers() {
    }

    @RequestMapping( value = "/{id}", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public @ResponseBody User getUser(@PathVariable int id) throws NotFoundException {
    }

    @RequestMapping( value = "/remove/{id}", method = RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.OK)
    public void delete(@PathVariable int id) throws NotFoundException {
    }
}

servlet:

当我尝试“/user”获取所有用户时,它工作正常,但是当我尝试获取某些用户时,例如“user/75”。 75 代表我得到的 {id}:

No mapping found for HTTP request with URI [/user/75] in DispatcherServlet with name 'userService'

不知道为什么。我的 url 模式错了吗?感谢您的帮助。

【问题讨论】:

    标签: spring spring-mvc servlets controller


    【解决方案1】:

    将 web.xml 的 &lt;url-pattern&gt;/user/*&lt;/url-pattern&gt; 行更改为 &lt;url-pattern&gt;/&lt;/url-pattern&gt;

    此更改使 Dispatcher Servlet 捕获 '/' 下的所有请求,而在您之前的配置中,它捕获 /user 下的所有请求(这意味着您的控制器的 find 方法将映射到 /user/user/{id}

    【讨论】:

      【解决方案2】:

      根据您在web.xmlcontroller 中的当前配置,您实际拥有的是:

      如果您已经在根目录中部署了您的 web 应用程序(即您的 web 应用程序位于您的 tomcat 的“/”目录中)然后访问您访问的所有用户

      http://localhost:8080/user/user
      

      要找到您的特定用户,您必须前往

      http://localhost:8080/user/user/{id}
      http://localhost:8080/user/user/75 //in your example
      

      如果您想为您的 REST 服务使用以下格式

      http://localhost:8080/user/
      http://localhost:8080/user/{id}
      

      然后您必须将您的 servlet 映射更改为以下内容:

        <servlet-mapping>
          <servlet-name>userService</servlet-name>  
          <url-pattern>/*</url-pattern>
        </servlet-mapping>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 2014-04-14
        • 2019-05-07
        • 2020-07-12
        相关资源
        最近更新 更多