web-dev-qa-db-ja.com

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_ではなく_localhost:8080/projectname/login/error_にアクセスすると、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>
_
20
Orvyl

メソッドのマッピングに/は必要ありません。 ""にマッピングするだけです。

26
chrylis

「/」を使用する必要はなく、リクエストメソッドも追加する必要があります。

@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

11
Binz

はい、可能です。 メソッドの_@RequestMapping_のパスは、クラスアノテーションのパスを基準にしています。

現在の設定では、loginRoot()

_localhost:8080/projectname/login/
_

これを防ぐ構成が他にない場合を想定します。