Spring Boot

[Spring] 요청 매핑 - @RequestMapping

HEY__ 2022. 8. 8. 14:14
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 속성이 설정되어있음을 알 수 있다.

@GetMapping

 


⛅️ @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