[ Java Spring3 ] URL と クラスメソッドをマッピング ( @RequestMapping )

Pocket

Spring3 フレームワークで HTTP リクエストがあった場合に、URL と起動するクラス・メソッドをマッピングするサンプルを掲載しています。なお、本サンプルは Web サーバに tomcat を使用して、動作検証しています。

スポンサーリンク

コントローラクラスのパッケージを設定

検索対象とするベースのパッケージを指定し、コントローラクラスの検索負荷を軽減させることができます。 WEB-INF/applicationContext.xml に、context:component-scan base-package にコントローラの検索を行うベースとなるパッケージを設定ます。

-- WEB-INF/applicationContext.xml

<?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:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
	<context:annotation-config />
	<context:component-scan base-package="masao.controller" />
</beans>

メソッドに URL を直接マッピングする

メソッドに URL を直接マッピングするには、クラスの前に @Controller アノテーションを、 メソッドの前に @RequestMapping アノテーションを記述します。

package masao.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class TestController 
{
    @RequestMapping(value = "/Controller1/action1/", method = { RequestMethod.GET })
    public void func1(HttpServletRequest request) {

        System.out.println("Request /Controller1/action/");
    }

    @RequestMapping(value = "/Controller2/action2/", method = { RequestMethod.GET })
    public void func2(HttpServletRequest request) {

        System.out.println("Request /Controller2/action2/");
    }
}

本例では、以下のようにマッピングされます。

URL実行されるメソッド
/Controller1/action1/TestController.func1
/Controller2/action2/TestController.func2

クラスに URL をマッピングする

上記では、メソッドと URL をダイレクトにマッピングさせました。直接マッピングすることで URL の階層とクラス / メソッドの階層と同一とならないように設定できます。この点は利点でもありますが、間違いを起こしやすいことにもなってしまうと思います。次は、クラスに @RequestMapping アノテーションを設定し、URLをマッピングさせるサンプルコードになります。

@Controller
@RequestMapping(value = "/Controller")
public class TestController 
{
    @RequestMapping(value = "/action1/", method = { RequestMethod.GET })
    public void func1(HttpServletRequest request) {

        System.out.println("Request /Controller/action1/");
    }

    @RequestMapping(value = "/action2/", method = { RequestMethod.GET })
    public void func2(HttpServletRequest request) {

        System.out.println("Request /Controller/action2/");
    }
}
URL実行されるメソッド
/Controller/action1/TestController.func1
/Controller/action2/TestController.func2
スポンサーリンク


Pocket

4 thoughts on “[ Java Spring3 ] URL と クラスメソッドをマッピング ( @RequestMapping )”

  1. Pingback: [ Java Spring3 ] @RequestMapping method 属性 [ POST / GET ] – 偏差値40の高い壁

  2. tuchida

    SpringMVC(STS最新版)でWeb開発をしています。
    ControllクラスのGETメソットにコントロールが遷移せつ直接JSPに制御が移ってしまいます。
    どこに原因があるのかもし、わかるようならばご指摘いただければありがたいです。
    (ちなみに以下の簡単なクラスです)
    @Controller
    @RequestMapping(value = “/AMenu”)
    public class AMenuController {

    private static final Logger logger = LoggerFactory.getLogger(AMenuController.class);

    @RequestMapping(value = “/AMenu”, method = RequestMethod.GET,
    headers=”Content-Type=text/*” )
    public ModelAndView getAMenu(Locale locale, Model model) throws IOException{

    logger.info(“AMenu(GET) The client locale is {}.”, locale);

    try{

    // システム情報設定
    EnvironmentInfo environmentInfo = new EnvironmentInfo();
    model.addAttribute(“systemImage”,environmentInfo.getSystemImage());
    model.addAttribute(“systemName”,environmentInfo.getSystemName());

    ModelAndView wView = new ModelAndView(“/AMenu”);
    return wView;

    }catch(Exception e){

    logger.info(“AMenu(GET) Error {“+ e.toString() + “}”, locale);

    ModelAndView wView = new ModelAndView(“Login”);
    return wView;

    }

    }

    }

    1. masao Post Author

      headers=”Content-Type=text/*” の条件を満たしていない可能性はありませんか?
      クライアント(ブラウザ)からのHTTPリクエストにContent-Typeがない、POST のときはあるけどGETのときはないとか。
      適当ですいません。

Leave a Comment

Your email address will not be published. Required fields are marked *