-
[스프링MVC - 1편] 스프링 MVC 기본기능 - 요청 매핑스프링&스프링부트 2025. 1. 28. 14:03
요청 매핑
MappingController
@RestController public class MappingController { private final Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping("/hello-basic") public String helloBasic() { log.info("helloBasic"); return "ok"; } }
@RequestMapping("/hello-basic")
/hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다
대부분의 속성을 배열[]로 제공하므로 {"/hello-basic", "/hello-go"}와 같이 다중 설정이 가능하다
HTTP 메서드
@RequestMapping에 method속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다
(모두 허용 - GET, HEAD, POST, PUT, PATCH, DELETE )
HTTP 메서드 매핑
/** * method 특정 HTTP 메서드 요청만 허용 * GET, HEAD, POST, PUT, PATCH, DELETE */ @RequestMapping(value = "/hello-basic", method = RequestMethod.GET) public String helloBasic() { log.info("helloBasic"); return "ok"; }
HTTP 메서드 매핑 축약
/** * 편리한 축약 애노테이션 (코드보기) * @GetMapping * @PostMapping * @PutMapping * @DeleteMapping * @PatchMapping */ @GetMapping(value = "/mapping-get-v2") public String mappingGetV2() { log.info("mapping-get-v2"); return "ok"; }
PathVariable(경로 변수) 사용
/** * PathVariable 사용 * 변수명이 같으면 생략 가능 * @PathVariable("userId") String userId -> @PathVariable String userId */ @GetMapping("/mapping/{userId}") public String mappingPath(@PathVariable("userId") String data) { log.info("mappingPath userId={}", data); return "ok"; }
최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호한다
- @RequestMapping은 URL 경로를 템플릿화 할 수 있는데, @PathVariable을 사용하면 매칭되는 부분을 편리하게 조회할 수 있다
- @PathVariable의 이름과 파라미터 이름이 같으면 생략할 수 있다
PathVariable 사용 - 다중
@GetMapping("/mapping/users/{userId}/orders/{orderId}") public String mappingPath(@PathVariable String userId, @PathVariable Long orderId) { log.info("mappingPath userId={}, orderId={}", userId, orderId); return "ok"; }
특정 파라미터 조건 매핑
/** * 파라미터로 추가 매핑 * params="mode", * params="!mode" * params="mode=debug" * params="mode!=debug" (! = ) * params = {"mode=debug","data=good"} */ @GetMapping(value = "/mapping-param", params = "mode=debug") public String mappingParam() { log.info("mappingParam"); return "ok"; }
특정 파라미터가 있거나 없는 조건을 추가할 수 있지만 잘 사용하지는 않는다
특정 헤더 조건 매핑
/** * 특정 헤더로 추가 매핑 * headers="mode", * headers="!mode" * headers="mode=debug" * headers="mode!=debug" (! = ) */ @GetMapping(value = "/mapping-header", headers = "mode=debug") public String mappingHeader() { log.info("mappingHeader"); return "ok"; }
미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume
/** * Content-Type 헤더 기반 추가 매핑 Media Type * consumes="application/json" * consumes="!application/json" * consumes="application/*" * consumes="*\/*" * MediaType.APPLICATION_JSON_VALUE */ @PostMapping(value = "/mapping-consume", consumes = "application/json") public String mappingConsumes() { log.info("mappingConsumes"); return "ok"; }
미디어 타입 조건 매핑 - HTTP 요청 Accept, produce
/** * Accept 헤더 기반 Media Type * produces = "text/html" * produces = "!text/html" * produces = "text/*" * produces = "*\/*" */ @PostMapping(value = "/mapping-produce", produces = "text/html") public String mappingProduces() { log.info("mappingProduces"); return "ok"; }
요청 매핑 - API 예시
회원 관리를 HTTP API로 만든다 생각하고 매핑을 어떻게 하는지 알아본다
회원 관리 API
- 회원 목록 조회 : GET `/users`
- 회원 등록 : POST `/users`
- 회원 조회 : GET `/users/{userId}`
- 회원 수정 : PATCH `/users/{userId}`
- 회원 삭제 : DELETE `/users/{userId}`
MappingClassController
@RestController @RequestMapping("/mapping/users") public class MappingClassController { @GetMapping public String users() { return "get users"; } @PostMapping() public String addUser() { return "post user"; } @GetMapping("/{userId}") public String findUser(@PathVariable String userId) { return "get userId = " + userId; } @PatchMapping("/{userId}") public String updateUser(@PathVariable String userId) { return "update userId = " + userId; } @DeleteMapping("/{userId}") public String deleteUser(@PathVariable String userId) { return "delete userId = " + userId; } }
728x90'스프링&스프링부트' 카테고리의 다른 글
[스프링MVC - 1편] 스프링 MVC 기본기능 - 3 (0) 2025.01.29 [스프링MVC - 1편] 스프링 MVC 기본기능 - 1 (0) 2025.01.28 [스프링MVC - 1편] 스프링 MVC 기본기능 - 프로젝트 생성 및 로그 (0) 2025.01.28 [스프링MVC - 1편] 스프링 MVC 시작 (0) 2025.01.27 [스프링MVC - 1편] 스프링 MVC 전체 구조 (0) 2025.01.27