2011-01-14 27 views
7

Stack  オーバーフローでこのエラーに関する多くの質問があります。ここに私の問題があります。Spring MVC - 要求URIのマッピングが見つかりません

私はこのリクエストをマップしようとしています:/user/{userId}ここで、userIdは文字列です。

UserController.java

@Controller 
@RequestMapping("/user") 
public class UserController { 
    private static final Logger log = Logger.getLogger(UserController.class.getName()); 

    @RequestMapping(method=RequestMethod.GET) 
    public @ResponseBody String info() { 
     log.debug("mapping succeeded!"); 
     return "<H1>foo</H1>"; 
    } 
} 

ウェブ/ WEB-INF /ユーザー-servlet.xml

:私は、次の注釈付きクラスと Spring構成で /userへの要求をGET処理することができています
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="com.example"/> 
</beans> 

web.xml

<servlet> 
    <servlet-name>user</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>user</servlet-name> 
    <url-pattern>/user/*</url-pattern> 
</servlet-mapping> 

その後、私は面白い何かを今すぐ/user

2011-01-14 15:47:41,942 DEBUG [com.example.rest.UserController] (http-11080-1) mapping succeeded! 

を要求します。私は次の私のコードを変更します。

@Controller 
@RequestMapping("/user") 
public class UserController { 
    private static final Logger log = Logger.getLogger(UserController.class.getName()); 

    @RequestMapping(value="/{userId}", method=RequestMethod.GET) 
    public @ResponseBody String info(@PathVariable String userId) { 
     log.debug("mapping succeeded! userId=" + userId); 
     return "<H1>foo</H1>"; 
    } 
} 

私は私が間違って何をやっている

(main) Pre-instantiating singletons in  org.s[email protected]36598d00: defining beans  [userController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor]; root of factory hierarchy 
(main) instantiating UserController 
(main) Mapped URL path [/user/*] onto handler 'userController' 
(main) Mapped URL path [/user/*.*] onto handler 'userController' 
(main) Mapped URL path [/user/*/] onto handler 'userController' 

... 

(http-11080-1) No mapping found for HTTP request with URI [/user] in DispatcherServlet with name 'user' 
(http-11080-1) No mapping found for HTTP request with URI [/user/foo] in DispatcherServlet with name 'user' 
(http-11080-1) No mapping found for HTTP request with URI [/user/] in DispatcherServlet with name 'user' 

No mapping found...恐ろしいがありますか?

答えて

9

ディスパッチャサーブレットがリクエストマッピングの一部としてマップされる実際のサーブレットパスは、通常は含まれません。要求マッピングはディスパッチャを基準にしています。縮退した最初のケ​​ースでは、ディスパッチャはあなたの意図を把握するのに十分なほどスマートですが、分解するパス変数を追加するときに始めます。あなたの現在の設定で、/user/user/fooにアクセスし、あなたが探しているものを得ることができる必要があります。

+2

これは、それを解決!私はこれがどのように動作するかについてはっきりしていません:/ userと/ user/userの両方を要求すると、userId = userという結果になります。どうして? – purecharger

関連する問題