URI란? Uniform Resource Identifier 의 줄임말로서 통합 자원 식별자라고 부릅니다.
URI 대한 내용은 https://searchmicroservices.techtarget.com/definition/URI-Uniform-Resource-Identifier 참고하세요
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value="/URI")
public class SampleController {
@GetMapping(value = "/normal")
@ResponseBody
public String getNormal() {
return "normal";
}
@GetMapping(value = "/normal/*")
@ResponseBody
public String getNormalAsta() {
return "normalAsta";
}
}
URI 요청을 할때 여러가지 패턴을 사용할수 있습니다.
? : 한글자 (~/URI/normal/? => ~/URI/normal/1)
* : 여러글자 (~/URI/normal/* => ~/URI/normal/testsetse)
** : 여러 패스 ~/URI/normal/** => ~/URI/normal/tests/setest/testes~~)
이외에도 정규식도 가능하며 만약 URI 패턴이 중복이 될수 있다면 더 구체적으로 맵핑되는 핸들러를 선택합니다.
package com.example.demo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.handler;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void testURI() throws Exception{
mockMvc.perform(get("/URI/normal"))
.andDo(print())
.andExpect(content().string("normal"))
.andExpect(handler().handlerType(SampleController.class))
.andExpect(handler().methodName("getNormal"));
mockMvc.perform(get("/URI/normal/asta"))
.andDo(print())
.andExpect(content().string("normalAsta"))
.andExpect(handler().handlerType(SampleController.class))
.andExpect(handler().methodName("getNormalAsta"));
}
}
* 기본적으로 스프링은 URI 확장자 맵핑을 지원합니다.
- 확장자 맵핑이란? /URI/normal 이라고 했을때 default로 /URI/normal.*도 인식 가능함
- 하지만 이 기능은 권장하지 않습니다. RFD Attack 등의 이유로 보안상의 이슈가 생길수 있습니다.
- 스프링부트에서는 기본적으로 사용하지 않도록 설정되어 있습니다.
by 백기선..스프링 웹 MVC
'Spring > SpringMVC' 카테고리의 다른 글
[Spring MVC] @SessionAttributes (0) | 2019.08.15 |
---|---|
[Spring MVC] @Valid vs @Validated (1) | 2019.08.13 |
[Spring MVC] @ModelAttribute (0) | 2019.08.13 |
[Spring MVC] 요청 매개변수 ( @RequestParam) (0) | 2019.08.13 |
[Spring MVC] 미디어 타입 ( MediaType ) (0) | 2019.07.25 |