Spring WebMVCをやってみる (6) - @RequestParam -

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

パスの一部をマッピングで結びつけるのが@PathVariableで、クエリーを結びつけるのが@RequestParam的な解釈で良いんだろうか。

SampleController.java

package sample;

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import static org.springframework.format.annotation.DateTimeFormat.ISO.DATE;

@Controller
@RequestMapping("/sample")
public class SampleController {
    @RequestMapping("/test")
    @ResponseBody
    public String test(@RequestParam @DateTimeFormat(iso = DATE) Date date) throws Exception {
        return "date: " + date;
    }
}

てな感じで前回では@PathVariableにしていた所を@RequestParamに変えただけかと。んまぁ前回でも書いたようにjava.util.Date型等の型変換をサポートするにはconversationServiceとか辺りを設定しておく必要があると思われる。それは前回のSpring WebMVCをやってみる (5) – PathVariable -で既に書いてるのでそこ参照

でちなみにそのパラメーターが必ずしも必要ではない場合等においては、@RequestParamのrequired引数をfalseにする事も出来る模様

SampleControllerTest.java

package swmvc;

import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.web.servlet.MvcResult;

import static org.junit.Assert.*;
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 {

    private static final String ACTUAL_DATE_STRING = "2013-01-01";

    @Test
    public void test() throws Exception {

        /* 以下でも可能っぽい
       MvcResult result = mock.perform(get("/sample/test?date=" + ACTUAL_DATE_STRING))
       */

        MvcResult result = mock.perform(
            get("/sample/test").param("date", ACTUAL_DATE_STRING)
        )
        .andExpect(status().isOk())
        .andReturn();

        MockHttpServletRequest request = result.getRequest();
        assertThat(request, notNullValue());
        assertThat(request.getParameterMap(), hasKey("date"));
        assertThat(request.getParameter("date"), is(ACTUAL_DATE_STRING));
    }
}

Spring WebMVCをやってみる (5) - PathVariable -