- @RequestMapping("/hello")
- @RequestMapping("/hello?")
- @RequestMapping("/hello/*")
- hello 뒤 / 이후 하나의 뎁스만 매핑된다.
- @RequestMapping("/hello/**")
- hello 뒤 / 이후 여러개의 뎁스가 매핑된다.
- @RequestMapping("/hello/[a-z]+")
- hello 뒤 / 이후 정규표현식이 매핑된다.
SampleController.java
@Controller
@RequestMapping
public class SampleController {
@RequestMapping(value = {"/hello", "/hi"})
@ResponseBody
public String hello() {
return "hello";
}
@RequestMapping("/hello?")
@ResponseBody
public String helloMustBeBehindOneChar() {
return "hello one char";
}
@RequestMapping("/hello/*")
@ResponseBody
public String helloMustBeBehindOneDepth() {
return "hello one depth";
}
@RequestMapping("/hello/**")
@ResponseBody
public String helloMustBeBehindOverOneDepth() {
return "hello over one depth";
}
@RequestMapping("/hello/{name:[a-z]+}")
@ResponseBody
public String helloPathVariableRegx(@PathVariable String name) {
return "hello regx " + name;
}
}
SampleControllerTest.java
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {
@Autowired
private MockMvc mockMvc;
/**
*
* 리퀘스트 매핑의 주소는 @RequestMapping(value = {"/hello", "/hi"}) 다.
*/
@Test
public void helloTest() throws Exception {
mockMvc.perform(get("/hello"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string("hello"))
.andExpect(handler().method(SampleController.class.getMethod("hello")));
}
/**
*
* 리퀘스트매핑의 주소는 @RequestMapping("/hello?") 다.
*/
@Test
public void helloMustBeBehindOneCharTest() throws Exception {
mockMvc.perform(get("/helloa"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string("hello one char"))
.andExpect(handler().method(SampleController.class.getMethod("helloMustBeBehindOneChar")));
}
/**
*
* 컨트롤러의 @RequestMapping("/hello?") 는 hello 뒤 한 글자만 매핑된다.
*/
@Test
public void helloMustBeBehindOneCharTest_두글자이상_expect_not_found() throws Exception {
mockMvc.perform(get("/helloaa"))
.andDo(print())
.andExpect(status().isNotFound());
}
/**
*리퀘스트매핑의 주소는 @RequestMapping("/hello/*") 다.
*
*/
@Test
public void helloMustBeBehindOneDepth() throws Exception {
mockMvc.perform((get("/hello/1")))
.andDo(print())
.andExpect(handler().methodName("helloMustBeBehindOneDepth"));
}
/**
*
* 리퀘스트매핑의 주소는 @RequestMapping("/hello/**")다.
*/
@Test
public void helloMustBeBehindOverOneDepth() throws Exception {
mockMvc.perform((get("/hello/1/2")))
.andDo(print())
.andExpect(handler().methodName("helloMustBeBehindOverOneDepth"));
}
/**
*
* 리퀘스트매핑의 주소는 @RequestMapping("/hello/{name:[a-z]+}") 다.
* 정규표현식 사용한다.
*/
@Test
public void helloRegx() throws Exception {
mockMvc.perform((get("/hello/eunmo")))
.andDo(print())
.andExpect(handler().methodName("helloPathVariableRegx"))
.andExpect(content().string("hello regx eunmo"));
}
}