2014-03-28 43 views
13

這可能嗎?Spring MVC:RequestMapping類和方法

@Controller 
@RequestMapping("/login") 
public class LoginController { 

    @RequestMapping("/") 
    public String loginRoot() { 
     return "login"; 
    } 

    @RequestMapping(value="/error", method=RequestMethod.GET) 
    public String loginError() { 
     return "login-error"; 
    } 

} 

localhost:8080/projectname/login/error訪問localhost:8080/projectname/login而不是當我得到一個404錯誤。

這裏是我的web.xml 項目名稱

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 

<servlet> 
    <description></description> 
    <servlet-name>projectname</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>projectname</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

回答

15

在方法的映射中,您不需要/。只需將其映射到""即可。

+1

這會工作,因爲''「'將相對於'」/ login「'仍然是'/ login'。 –

3

是的,這是可能的。 該方法中@RequestMapping的路徑與類註解的路徑有關。

根據您當前的設置,loginRoot()將處理請求

localhost:8080/projectname/login/ 

假設你沒有任何東西在您的配置防止這種。

+0

這就是我認爲太多,但即時得到一個404錯誤訪問'本地主機:8080 /項目名稱/登錄'我不知道爲什麼,我錯過了什麼? – Orvyl

+0

在「error.jsp」的同一目錄中是否有名爲「login.jsp」的JSP? – nickdos

+0

@orvyl它適用於我。我們能否看到您的web.xml和servlet上下文配置?你的映射可能是不同的,並阻止了這一點。 –

8

您不需要「/」,並且您還需要添加請求方法。

@RequestMapping(method = RequestMethod.GET) 
public String loginRoot() { 
    return "login"; 
} 

考慮使用Spring MVC的測試,以測試這些場景的過程更容易:

https://spring.io/blog/2012/11/12/spring-framework-3-2-rc1-spring-mvc-test-framework

+0

是的,這也適用。 :) – Orvyl

+0

只是跑了一個快速測試,在你的情況下,你可以只有@RequestMapping,它會工作。請求方法默認爲GET。 – Binz

+1

@BineshGunaratne默認情況下,請求方法不是GET。如果你省略'method'屬性,所有的請求方法都將被匹配。 –