Spring WebMVCをやってみる (11) - @RequestMappingのparams -

2013-12-18T00:00:00+00:00 Java Spring Framework

例えば

<form action="/swmvc/sample/index.action" method="post">
    <input type="submit" name="say1" value="say1" />
    <input type="submit" name="say2" value="say2" />
</form>

っていうようにターゲットとなるアクションは1つでサブミットによって処理されるアクションを切り分けたい場合には@RequestMappingアノテーションにparams属性で<input type="submit">で指定されてるname属性の値を指定すれば良いらしいとの事

SampleController.java

package sample;

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

@Controller
@RequestMapping("/sample")
public class SampleController {

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index() {
        return "edit";
    }

    @RequestMapping(value = "/index", method = RequestMethod.POST, params = "say1")
    @ResponseBody
    public String say1() {
        return "hoge";
    }

    @RequestMapping(value = "/index", method = RequestMethod.POST, params = "say2")
    @ResponseBody
    public String say2() {
        return "fuga";
    }
}

っていう感じで

  • <input type="submit" name="say1" /> ではsay1メソッドが発生
  • <input type="submit" name="say2" /> ではsay2メソッドが発生

っていう事になる

SampleControllerTest.java

package swmvc;

import org.junit.Test;

import static org.hamcrest.Matchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

public class SampleControllerTest extends AbstractTestCase {

    @Test
    public void test_say1() throws Exception {
        mock.perform(post("/sample/index").param("say1", ""))
            .andExpect(status().isOk())
            .andExpect(content().string(is("hoge")));
    }

    @Test
    public void test_say2() throws Exception {
        mock.perform(post("/sample/index").param("say2", ""))
            .andExpect(status().isOk())
            .andExpect(content().string(is("fuga")));
    }
}

余談: GETリクエストでも問題無いのかって件

例えば上記のPOSTリクエストで受け付ける条件を排除してGETリクエストで送るのは出来るのかって話ですが、結論から言えば出来る

というようになる模様

Spring WebMVCをやってみる (12) - RedirectAttributes - jsp-config