[Spring] @RequestMapping

Woo0·2023년 10월 27일
post-thumbnail

@RequestMapping이란

  • URL 호출이 오면 특정 메서드가 실행하도록 매핑
  • 대부분의 속성을 배열로 제공하므로 다중 설정 가능 ex) {"/hello1", "/hello2"}

📝 @RequestMapping

@RequestMapping(value = "/hello-spring", method = RequestMethod.GET)
public String helloSpring() {
	...
}

@RequestMapping에 method 속성으로 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다. (GET, HEAD, POST, PUT, PATCH, DELETE 모두 허용) 위의 코드에서는 메서드를 지정하였으므로 POST 요청을하면 HTTP 405 상태코드를 반환한다.

📝 @GetMapping

@GetMapping(value = "/hello-spring")

HTTP 메서드를 축약한 애노테이션을 사용하는 것이 더 직관적이다. 코드를 보면 내부에서 @RequestMapping과 method 를 지정해서 사용하는 것을 확인할 수 있다.

📝 @PathVariable

@GetMapping("/hello/{userId}")
public String helloSpring(@PathVariable("userId") String data) {
	...
}

'/hello/woo'와 같이 리소스 경로에 식별자를 넣는다. @PathVariable의 이름과 파라미터 이름이 같으면 생략이 가능하다.

@GetMapping("/hello/users/{userId}/orders/{orderId}")
public String helloSpring(@PathVariable String userId, @PathVariable Long 
orderId) {
	log.info("userId={}, orderId={}", userId, orderId);
 	...
}

PathVariable을 다중으로도 사용할 수 있다.

📝 @RequestParam

@GetMapping("/hello")
public String helloSpring(@RequestParam("userId") String data) {
	...
}

URL 호출 형식이 /hello?userId=hello 이고 다중으로 사용할 수 있다.

📝 params, headers, consumes, produce

@GetMapping(value = "/hello", params = "mode=debug")
public String helloSpring() {
	...
}

특정 파라미터가 있거나 없는 조건을 추가할 수 있지만 잘 사용하지는 않는다.

@GetMapping(value = "/hello", headers = "mode=debug")
public String helloSpring() {
	...
}

params 매핑과 비슷하지만, HTTP 헤더를 사용한다.

@PostMapping(value = "/hello", consumes = "application/json")
public String helloSpring() {
	...
}

HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑하고 맞지 않으면 HTTP 415 상태코드를 반환한다. application/jsonMediaType.APPLICATION_JSON_VALUE로 대체할 수 있다.

@PostMapping(value = "/hello", produces = "text/html")
public String helloSpring() {
	...
}

HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑하고 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다. Accept 헤더는 클라이언트가 해당 자료형을 받을 수 있다는 의미이다.


출처: 스프링 MVC 1편 (김영한)

profile
실패를 두려워하지 않는 백엔드 개발자가 되기 위해 노력하고 있습니다.

0개의 댓글