Web/Spring
[Inflearn] 스프링 MVC (4) 요청 매핑
UL :)
2022. 1. 28. 01:31
김영한 강사님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의 정리
2022.01.27 진행
강의를 듣고 개인적으로 정리한 글입니다. 코드와 그림 출처는 김영한 강사님께 있습니다. 문제 있을 시 알려주세요.
특정 파라미터 조건 매핑, 특정 헤더 조건 매핑은 생략하였음
1. PathVariable(경로 변수) 매핑
최근 HTTP API는 리소스 경로에 식별자를 넣는 다음과 같은 스타일을 선호하고, 실무에서 이런 스타일의 URL 경로를 정말 많이 쓴다고 한다.
- /mapping/userA
- /users/1
/**
* PathVariable 사용
* 변수명이 같으면 생략 가능
*
* @PathVariable("userId") String userId -> @PathVariable userId
* /mapping/userA
*/
@GetMapping(value="/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data){
log.info("mappingPath userId={}",data);
return "ok";
}
/**
* 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";
}
@PathVariable
의 이름과 파라미터 이름이 같으면 생략 가능@RequestMapping
은 URL 경로를 템플릿화 할 수 있는데@PathVariable
을 사용하면 매칭되는 부분을 편리하게 조회 할 수 있다.
Postman Test
2. 미디어 타입 조건 매핑
2.1. 요청 헤더의 Content-Type 기반 매핑 - consumes
HTTP요청의 Content-Type
(미디어 타입)에 따라 다르게 처리해야할 때에는 consumes
을 사용한다.
Content-Type
(client가 보낼 content 타입이 명시됨) →consumes
(controller가 소비할 content 타입이 명시됨)- 즉 HTTP 헤더의
Content-Type
이 controller의consumes
와 일치해야 호출된다.
/**
* 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";
}
Postman Test
Body에서 JSON을 선택하고 데이터를 넣으면 자동으로 Content-type이 설정된다.
2.2. 요청 헤더의 Accept 기반 매핑 - produces
HTTP요청의 Accept에 따라 다르게 처리해야할 때에는 produces
를 사용한다.
Accept
(client가 받아들일 수 있는 content 타입이 명시됨) →produces
(controller가 생산하는 content 타입이 명시됨)- 즉 HTTP 헤더의
Accept
가 controller의produces
와 일치해야 호출된다.
/**
* 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";
}
Postman Test
3. API 예시
회원 관리 예제로 URL 매핑을 어떻게 하는지 알아보자
※ 데이터는 안다루고 URL 매핑만 해볼 것임
- 회원 목록 조회: GET /users
- 회원 등록: POST /users
- 회원 조회: GET /users/{userId}
- 회원 수정: PATCH /users/{userId}
- 회원 삭제: DELETE /users/{userId}
@RestController
@RequestMapping("/mapping/users")
public class MappingClassController {
@GetMapping
public String user(){
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;
}
}
Postman Test
- 회원 목록 조회
2. 회원 등록
3. 회원 조회
4. 회원 수정
5. 회원 삭제