✏️ 요청 매핑

2026. 7. 18. 18:45·Backend/Spring MVC

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

매핑 정보

@RestController
@Slf4j
public class MappingController {

    @RequestMapping("/hello-basic")
    public String helloBasic() {

        log.info("helloBasic");
        return "ok";

    }
 }
@RequestController
    • @Controller는 반환 값이 String 이면 View 이름으로 인식된다. 그래서 View를 찾고 View가 랜더링 된다.
    • @RestController는 반환 값으로 View를 찾는 것이 아니라, HTTP message Body에 바로 입력한다. 따라서 실행 결과로 ok 메세지를 받을 수 있다.

HTTP Response 반환 값이 View가 아닌 특정 데이터인 경우 @ResponseBody가 필요했다. 그러나 매번 Controller에 @ResponseBody를 적용하는 것은 번거롭다.

  •  
  • 그래서 등장한 것이 @RestController이다.*
    @RestController = @Controller + @ResponseBody 를 의미한다.
    결론: HTTP REST API개발을 할 때에는 @RestController를 사용하자!
@RequestMapping("/hello-basic")
@RequestMapping{"/hello-basic", "/hello-go"}
  • /hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다.
  • 대부분의 속성을 배열[] 로 제공하므로 다중 설정이 가능하다.
    EX) {"/hello-basic", "/hello-go"}

📌 HTTP 메서드

@RequestMapping에 Method 속성으로 HTTP 메서드를 지정하지 않으면 GET, POST, PUT, DELET, HEAD 모두 허용이 된다. HTTP 메서드와 무관하게 호출된다.

✔︎ HTTP 메서드 매핑 - @RequestMapping

@RequestMapping 방식은 HTTP의 request를 method에 따라 매핑한다.

/* method 속성 지정으로 HTTP method 와 매핑 */
@RequestMapping(value = "mapping-get-v1", method = RequestMethod.GET)
    public String mappingGetV1() {
        log.info("mappingGetV1");
        return "ok";
    }

만약 여기에 POST 요청을 한다면 Spring MVC는 HTTP 405 상태코드(Method Not Allowed)를 반환한다.

✔︎ HTTP 메서드 매핑 - 축약 매핑

HTTP 메서드를 축약한 애노테이션을 사용하는 방식이다.

 /**
     * 편리한 출약 애노테이션
     *
     * @GetMapping
     * @PostMapping
     * @PutMapping
     * @DeleteMapping
     * @PatchMapping
     */

    @GetMapping(value = "/mapping-get-v2")
    public String mappingGetV2() {
        log.info("mapping-get-v2");
        return "ok";
    }

HTTP 메서드를 축약한 애노테이션을 사용했더니 더욱 직관적이다. @RequestMapping에 비해 직관적이라는 장점이 있어서 권장되는 방식이다.

 

@GetMapping 내부


@GetMapping 내부를 보니 @RequestMapping과 method를 지정해서 사용하는 것을 볼 수 있다.

📌 다양한 옵션

✔︎ 특정 파라미터 조건 매핑 - params

/**
* 파라미터로 추가 매핑
   * 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";
  }
  • 특정 파라미터가 있거나 없는 조건을 추가할 수 있다.
  • Query String으로 넘어온 데이터에 특정 parameter가 존재할 때 매핑되는 방식이다.
  • 실무에서 자주 사용되지는 않는다.

✔︎ 특정 헤더 조건 매핑 - headers

/**
*특정 헤더로 추가 매핑
   * 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 header를 사용한다.
  • HTTP request의 header에 특정 값이 있을 때 매핑되는 방식이다.
  • 실무에서 자주 사용되지는 않는다.

✔︎ 미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume

/**
* Content-Type 헤더 기반 추가 매핑 Media Type
   * consumes="application/json"
   * consumes="!application/json"
   * consumes="application/*"
   * consumes="*\/*"
   * MediaType.APPLICATION_JSON_VALUE
   */
  @PostMapping(value = "/mapping-consume", consumes = "application/json")
  public String mappingConsumes() {
      log.info("mappingConsumes");
      return "ok";
  }
    • HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑한다.
    • 만약 맞지 않으면 HTTP 415 상태코드(Unsupported Media Type)을 반환한다.

예시
consumes = "text/plain"
consumes = {"text/plain", "application/*"}
consumes = MediaType.TEXT_PLAIN_VALUE

  •  

✔︎ 미디어 타입 조건 매핑 - HTTP 요청 Accept, produce

/**
* Accept 헤더 기반 Media Type * produces = "text/html"
* produces = "!text/html"
 * produces = "text/*"
   * produces = "*\/*"
   */
  @PostMapping(value = "/mapping-produce", produces = "text/html")
  public String mappingProduces() {
      log.info("mappingProduces");
      return "ok";
  }
    • HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑한다.
    • 만약 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다.
      ** 출처**
      김영한님의 Spring MVC 강의
    •  

예시
produces = "text/plain"
produces = {"text/plain", "application/*"}
produces = MediaType.TEXT_PLAIN_VALUE
produces = "text/plain;charset=UTF-8"

  •  

'Backend > Spring MVC' 카테고리의 다른 글

✏️ HTTP 요청 메세지 - 단순 텍스트  (0) 2026.07.18
✏️ HTTP request 데이터 조회  (0) 2026.07.18
✏️ Logging  (0) 2026.07.18
✏️ Spring MVC 시작하기  (0) 2026.07.18
✏️ Front Controller 패턴, Adapter 패턴  (0) 2026.07.18
'Backend/Spring MVC' 카테고리의 다른 글
  • ✏️ HTTP 요청 메세지 - 단순 텍스트
  • ✏️ HTTP request 데이터 조회
  • ✏️ Logging
  • ✏️ Spring MVC 시작하기
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Project
    BOJ
    interview
    object
    Spring MVC
    트러블슈팅
    Book
    Python
    java
    척척학사
    Spring
    나의 작은 프로젝트
    jpa
    Algorithm
    게시판
    CS Interview
    OS
    개념 정리!
    HTTP WEB 기본 지식
    http
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
✏️ 요청 매핑
상단으로

티스토리툴바