Spring WebMVCをやってみる (6) - @RequestParam -
パスの一部をマッピングで結びつけるのが@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));
}
}