@RequestMapping은 Spring MVC에서 사용하는 애노테이션으로, 클라이언트가 보낸 HTTP 요청을 처리할 메서드나 클래스를 매핑하기 위해 사용된다. 즉, 특정 URL로 들어오는 요청을 어떻게 처리할지 연결하는 역할.
1. RequestMapping의 기본 동작 원리
@RequestMapping은 요청의 URL을 기준으로 컨트롤러나 메서드에 매핑한다.
@Controller
public class MyController {
@RequestMapping("/hello")
public String sayHello() {
return "hello"; // View 이름 (hello.html 같은 템플릿 파일을 반환)
}
}
- 클라이언트가 /hello URL로 요청을 보내면 sayHello() 메서드가 실행
- 메서드가 반환한 문자열 hello는 ViewResolver를 통해 템플릿 엔진(ex. thymeleaf)에서 처리
2. @RequestMapping의 주요 속성
@RequestMapping은 단순히 URL만 매핑하는 것이 아니라, 요청의 HTTP 메서드, 헤더, 파라미터 등을 기준으로도 세부적인 매핑을 설정할 수 있다.
- 주요 속성
- value(또는 path) : 매핑할 URL 경로
- method : 허용할 HTTP 메서드(GET, POST 등)
- params : 특정 요청 파라미터에 따라 처리
- headers : 특정 요청 헤더에 따라 처리
- consume : 해당 HTTP Header Content-Type과만 매핑 된다.
- produces : 요청 헤더의 Accept 값에 따라서 produces 하는 값이 변한다
3. 속성별 사용
- HTTP 메서드 매핑
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public String submitForm(){
return "submmit";
}
- 여기서 method = RequestMethod.POST는 POST 요청만 처리하도록 설정(GET, PUT, DELETE 요청은 처리 X)
- 요청 파라미터 조건 추가
@RequestMapping(value = "/filter", params = "type=advanced")
public String filterAdvanced() {
return "filter";
}
- 요청 URL : /filter?type=advanced 만 매핑된다.
- type 파라미터가 없거나 값이 다른 경우 이 메서드는 실행 X
- MediaType 매핑, consume(수용)
@PostMapping(value = "/example", consumes = "application/json")
public ResponseEntity<String> handleJsonRequest(@RequestBody MyObject obj) {
return ResponseEntity.ok("Received JSON!");
}
- consumes는 클라이언트가 요청할 때 보내는 데이터의 형식(Content-Type)을 제한한다.
즉, 서버가 어떤 형식의 데이터를 받아들일지 정의합니다.
- 위 코드에서는 클라이언트가 JSON 형식으로 데이터를 보내야 요청이 처리된다. 만약 다른 Content-Type으로 요청하면 Media Type 오류가 발생
- produces
@GetMapping(value = "/example", produces = "application/json")
public ResponseEntity<MyObject> sendJsonResponse() {
MyObject obj = new MyObject();
return ResponseEntity.ok(obj);
}
- produces는 서버가 클라이언트에게 응답할 때 보내는 데이터의 형식(Content-Type)을 지정한다.
즉, 서버가 어떤 형식의 데이터를 반환할지 정의한다.
4. @RequestMapping의 위치
1. 클래스에 선언 : 공통 URL을 설정.
2. 메서드에 선언 : 세부 동작을 설정.
@Controller
@RequestMapping("/api") // 모든 URL에 "/api"가 공통으로 추가
public class ApiController {
@RequestMapping("/users") // 실제 매핑: "/api/users"
public String getUsers() {
return "users";
}
@RequestMapping("/products") // 실제 매핑: "/api/products"
public String getProducts() {
return "products";
}
}
요즘 현대 Spring MVC에서는 @RequestMapping 보다는 @GetMapping, @PostMapping 등을 사용한다.
세부 조건(ex. 헤더, 파라미터 등)이 많다면 @RequestMapping을 사용하면 된다!!
'Back-End > Spring-MVC' 카테고리의 다른 글
| HTTP 응답 데이터 (1) | 2024.12.02 |
|---|---|
| HTTP 요청 데이터 (1) | 2024.12.02 |
| @Controller 와 @RestController 요약 정리 (0) | 2024.12.01 |
| Spring MVC 구조 흐름 (0) | 2024.11.30 |
| Spring MVC가 나오게 된 이유 (0) | 2024.11.30 |