728x90
이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
⛅️ @RequestMapping이란?
✅ 요청 매핑이란?
- url 요청이 왔을 때 어떤 컨트롤러가 호출되어야 할지 mapping 해놓는 것을 말한다.
- 메서드의 위에 @RequestMapping 어노테이션을 명시함으로써 적용할 수 있다.
✅ 사용법
@RequestMapping("url 경로")
웹 브라우저에서 서버로 url경로를 통해 요청이 들어오면 해당 메서드가 실행되게 된다.
@RequestMapping("/mapping")
public String mappingPath() {
log.info("request mapping");
return "ok";
}
⛅️ HTTP 메서드 매핑 축약
✅ HTTP 메서드
@RequestMapping(value="url경로", method = RequestMethod.HTTP메서드)
- @RequestMapping에 method 속성에 HTTP 메서드를 지정하지 않으면 HTTP 메서드에 무관하게 호출된다.
즉, GET, POST, PUT, PATCH, DELETE 등 메서드에 상관없이 호출된다. - @RequestMapping에 method 속성을 통해 HTTP 메서드를 지정하면, 해당 HTTP 메서드로만 호출이 가능하다.
- 만일 지정하지 않은 HTTP 메서드를 통해 요청이 들어오면 상태코드 405(Method Not Allowed)를 반환한다.
✅ HTTP 메서드 매핑 종류
- @RequestMapping의 HTTP 메서드 중 GET, POST, PUT, PATCH, DELETE는 축약한 어노테이션을 제공한다.
- 종류: @GetMapping, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping
- HTTP 메서드 축약 어노테이션을 열어보면 @RequestMapping(method = RequestMethod.GET)과 같이 method 속성이 설정되어있음을 알 수 있다.
⛅️ @PathVariable
✅ @PathVariable을 이용하여 url 경로에서 매칭되는 부분(변수)를 조회할 수 있다.
// localhost:8080/mapping/userA 로 요청한 경우, data의 값에 userA가 들어가게 된다.
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data) {
log.info("mappingPath userId={}", data);
return "ok";
}
✅ @PathVariable의 이름과 변수명이 같다면 밑과 같이 생략할 수 있다.
// @PathVariable의 이름과 파라미터 이름이 같으면 밑과 같이 생략할 수 있다.
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable String userId) {
log.info("mappingPath userId={}", userId);
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";
}
⛅️ 추가 매핑
✅ 파라미터를 통한 추가 매핑 : params = "key=value"
- value에 해당하는 url의 뒤에 query string 형식을 통해 특정 파라미터가 있거나 없는 조건을 통해 추가 매핑할 수 있다.
- = 외에도, !, !=, 중복 조건 등을 추가할 수 있다.
- 밑의 코드 경우에는 localhost:8080/mapping-param?mode=debug 요청이 들어오면 실행된다.
/**
* 파라미터로 추가 매핑
* 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 = "key=value"
- HTTP 요청 메세지의 header 내용을 통해 추가 매핑할 수 있는 방법이다.
- localhost:8080/mapping-header 요청이 들어왔을 때, HTTP의 header에 key의 값에 value가 있다면 밑의 메서드가 실행된다.
/**
* 특정 헤더로 추가 매핑
* 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 : consumes = "미디어 타입"
- HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑한다.
- 만약 맞지 않으면 HTTP 415 상태코드(Unsupported Media Type)을 반환한다.
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
log.info("mappingHeader");
return "ok";
}
✅ 미디어 타입 조건 매핑 - HTTP 요청 Accept : produce = "미디어 타입"
- HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑한다.
- 만약 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다.
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
log.info("mappingHeader");
return "ok";
}
728x90