목차
@RequestMapping
@Controller 또는 @RestController 어노테이션으로 등록된 클래스는 자동으로 스프링 빈으로 등록이 되어 매핑됩니다. 하지만 사용자가 요청한 URL에 매핑하기 위해서는 빈의 매핑 정보를 정의해야 합니다. 이때 사용하는 것이 @RequestMapping 어노테이션입니다.
@RequestMapping 어노테이션은 Spring MVC Framework의 RequestHandlerMappingHandler 인터페이스를 어노테이션화한 것으로서, 사용자의 요청을 스프링 Controller 메소드 또는 클래스에 매핑하기 위해 사용됩니다. 클래스 레벨에 사용하면 클래스 내 모든 메소드에 공유되는 매핑 주소로 설정할 수 있으며, 메소드 레벨에 사용하면 특정한 매핑으로 범위를 좁힐 수 있습니다.
@RequestMapping 어노테이션에는 URL, HTTP 메소드, 요청 파라미터, 헤더, 미디어 타입 등 여러 가지 속성(attribute)을 지정할 수 있는데, 지정한 속성에 따라 handler가 매핑을 하게 됩니다. URL을 포함한 모든 속성이 같을 수는 없으며, 어느 하나라도 다르다면 같은 URL로 들어온 요청에 대해서도 다른 처리를 할 수 있게 됩니다.
value
value는 디폴트 엘리먼트로서, 연결할 URL을 의미합니다. 보통 호스트 주소와 포트 번호를 제외하고 API 설계 규약에 따라 이름을 짓습니다.
@RequestMapping(value = "/test")
@RequestMapping("/test") //value를 제외하고 다른 속성을 지정하지 않는 경우 value 생략 가능
@RequestMapping(value = {"/test", "/example"}) //OR 조건, 여러 URL과 매핑 가능
PathPattern을 이용한 URL 지정도 가능합니다.
@RequestMapping(value = "/test/u?er") //한 글자 일치 (ex./test/user)
@RequestMapping(value = "/test/*user") //0 또는 여러 글자 일치 (ex./test/loginuser)
@RequestMapping(value = "/test/*") //해당 경로 바로 아래까지만 (ex./text/user)
@RequestMapping(value = "/test/**") //해당 경로 아래 모두 (ex./test/user, /test/user/example)
@RequestMapping(value = "/test/{user}") //@PathVariable 파라미터로 전달받은 값을 변수로 사용 (ex./test/amy)
@RequestMapping(value = "/test/{user:[a-z]+}") //정규식을 사용한 변수 (ex./test/amy)
method
HTTP 요청 메소드에 따라 매핑되는 대상을 다르게 설정할 수 있습니다. RequestMethod로 명명되어 있는 GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE 8가지 중 하나를 사용할 수 있으며, 지정하지 않을 시 모든 종류의 요청에 대해 매핑하게 됩니다.
@RequestMapping(value = "/test", method = RequestMethod.GET)
@RequestMapping(value = "/test", method = RequestMethod.POST)
@RequestMapping(value = "/test", method = RequestMethod.PUT)
@RequestMapping(value = "/test", method = RequestMethod.DELETE)
@RequestMapping(value = "/test", method = {RequestMethod.GET, RequestMethod.POST}) //OR 조건, 여러 요청방식에 대해 매핑
스프링 4.3 버전부터는 이를 줄여서 사용할 수 있는 축약형(shortcut) 어노테이션을 사용할 수 있습니다.
@GetMapping(value = "/test")
클래스 레벨에 공통되는 URL 주소인 /test를 매핑 주소로 설정하고 각 메소드에 대해 축약형 어노테이션을 다음과 같이 사용하면, /test 주소에 대한 요청이 각 요청 방식에 맞는 메소드로 매핑됩니다.
@Controller
@RequestMapping(value = "/test")
public class TestController {
@GetMapping
public String getXX() {
return "view1";
}
@PostMapping
public String postXX() {
return "view2";
}
@PutMapping
public String putXX() {
return "view3";
}
@DeleteMapping
public String deleteXX() {
return "view4";
}
}
params
파라미터로 전달된 값이 지정한 값과 일치하는 것을 매핑해 줍니다. 사용자가 요청하는 URL에 특정 파라미터 값을 요구하거나 제외하여 매핑할 수 있습니다.
@RequestMapping(value = "/test", params = "userid=admin") //key=value가 모두 일치하는 경우
@RequestMapping(value = "/test", params = "status!=0") //해당 key=value가 아닌 모든 경우
@RequestMapping(value = "/test", params = "status") //해당 key를 갖는 모든 경우
@RequestMapping(value = "/test", params = {"userid=admin", "status!=0"}) //AND 조건, 지정한 조건이 모두 일치하는 경우
매핑 결합
클래스 레벨에 @RequestMapping을 지정하여 공통 조건을 나타내고, 내부 메소드에서 세부 조건을 지정할 수 있습니다. 아래의 경우 매핑되는 주소는 /test/example 이 됩니다.
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "/example", method = RequestMethod.GET)
public String getXX() {
return "view1";
}
}
참고
- https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping
- https://maenco.tistory.com/entry/Spring-MVC-Request-Mapping-%EA%B3%BC-REST-API-%EC%84%A4%EA%B3%84
- https://tecoble.techcourse.co.kr/post/2021-06-18-spring-request-mapping/
- https://stalker5217.netlify.app/spring/request-handler/
'Spring' 카테고리의 다른 글
[Spring] Model, ModelAndView, @ModelAttribute - 컨트롤러에서 뷰로 데이터 전송하기 (0) | 2022.09.03 |
---|---|
[Spring] @RequestParam - 요청 파라미터 데이터 파싱하기 (0) | 2022.09.02 |
[Spring] 스프링 MVC의 기본 구조 (0) | 2022.08.31 |
[Spring] @Transactional 기본 사용법 (0) | 2022.08.27 |
[Spring] DB 연동 - MyBatis (0) | 2022.08.27 |
댓글