본문 바로가기

Back-End/Spring-MVC

@RequestMapping

@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