@RequestMapping이란?
client에서 오는 요청을 처리하기 위한 api url을 매핑할 때, Spring에서는 @RequestMapping이라는 어노테이션을 사용한다. 이때, 편의를 위해서 이 RequestMapping을 4가지로 나뉘어 추가적으로 지원하는데, 이는 아래의 5가지와 같다.
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
@ReqeustMapping의 옵션
value
value는 간단하게 말하면 연결할 url이다.
이는 다양한 방식으로 사용할 수 있으며, 기본적으로 url을 넣는 이외에도 정규식, 변수, AntPattern 등을 다양하게 활용할 수 있다.
@RequestMapping(value = "/example")
// value를 제외한 다른 옵션이 없는 경우
@RequestMapping("/example")
// Ant pattern을 사용한 경우 -> example/1, example/runa등 모두 연결된다.
@RequestMapping("/example/**")
//사이에 변수를 넣는 경우
@RequestMapping("/example/{id}")
//{변수명:정규식}의 구문으로 url 변수를 선언할 경우
@GetMapping("/{name:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{ext:\\.[a-z]+}")
method
RequestMethod로 명명된 8가지 중 하나를 사용하는 것이 일반적이다.
public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
//적용 예시
@RequestMapping(method = RequestMethod.GET, value = "/example")
하지만, GET, POST, PUT, PATCH, DELETE의 경우에는 각각의 메서드에 맞는 어노테이션 (위 예시의 경우 @GetMapping)을 사용하는 것이 더 간결하고 가독성이 좋아진다.
params
params는 api url을 특정해서 전달받고 싶을 때 사용하는 것으로, params에 전달한 것과 일치하는 params가 붙으면 이 메서드로 매핑한다.
// /post?useYn=Y 일 경우 호출됨
@RequestMapping(value="/example", params="useYn=Y")
// not equal도 가능
@RequestMapping(value="/example", params="useYn!=Y")
// 값에 상관없이 파라미터에 useYn이 있을 경우 호출됨
@RequestMapping(value="/example", parmas="useYn")
// 파라미터에 useYn이 없어야 호출됨
@RequestMapping(value="/example", params="!useYn")
headers
header의 정보를 제한할 수 있도록 전달하는 옵션이다.
@RequestMapping(value="/example", headers="content-type=text/*")
produces
출력하고자 하는 데이터 포맷을 정의하는 데 사용한다. 아래 예시의 경우에는 return값을 textPlainValue로 지정할 수 있다. 다만, @RestController에서 ResponseEntity를 반환하는 경우에는 application/json으로 값이 지정되어있기 때문에 특정 옵션을 설정할 수 없다.
@PostMapping( value ="/hello", produces = MediaType.TEXT_PLAIN_VALUE)
consumes
수신하고자 하는 데이터 포멧을 정의한다.
하지만 @RequestBody와 @ModelAttribute의 경우 HttpMessageConverter에서 객체로 변환하는 과정을 지나며 기본 값으로 application/json이 지정되어 있기 때문에 특정 옵션을 줄 수 없다.
@PostMapping(value = "/produce{example}", consumes = MediaType.TEXT_PLAIN_VALUE)
참고자료
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping
https://tecoble.techcourse.co.kr/post/2021-06-18-spring-request-mapping/
'프로그래밍 공부 > Spring' 카테고리의 다른 글
[Spring] DI(Dependency Injection, 의존성 주입)이란? (0) | 2022.04.25 |
---|---|
[Spring] @Controller와 @RestController (0) | 2022.04.22 |
[Spring] JsssionID란? (0) | 2022.02.16 |
스프링 스터디 기본편 -7 (0) | 2021.05.02 |
스프링 스터디 기본편 -6 (0) | 2021.04.26 |