Spring MVC - 요청 매핑

JeongHoHyun·2025년 2월 6일

Spring MVC

목록 보기
3/21

요청 매핑

2개 이상의 요청 매핑

@RequestMapping(value = {"/hello-basic", "hello-go"}, method = RequestMethod.GET)
    public String helloBasic() {
        log.info("helloBasic");
        return "OK";
    }
  • value 안에 {}로 담으면 된다 (배열 선언 형식)

method 생략 매핑

@GetMapping(value = "/mapping-get-v2")
    public String helloBasicV2() {
        log.info("helloBasicV2");
        return "OK";
    }
  • method를 지정해주지 않으면 모든 메서드로 들어오는 요청을 전부 처리한다.
  • GetMapping 이라고 선언해주면 method를 따로 작성해주지 않아도 Get 메서드만 처리한다.
  • 이외에도 PostMapping, DeleteMapping, PutMapping, PatchMapping 가있다.

⭐️ PathVariable(경로 변수) 사용

@GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable("userId") String data) {
        log.info("mappingPath userId={}", data);
        return "OK";
    }
  • 최근 HTTP API는 리소스 경로에 식별자를 넣는 스타일을 선호한다.
  • @RequestMapping은 URL 경로를 템플릿 화 할 수 있는데, @PathVariable을 사용하면 매칭 되는 부분을 편리하게 조회할 수 있다.
  • @PathVariable의 이름과 파라미터 이름이 같으면 생략할 수 있다.
    • (@PathVariable String userId)

PathVariable 다중 사용

@GetMapping("/mapping/users/{userId}/orders/{orderId}")
    public String mappingPath(@PathVariable String userId, @PathVariable String orderId) {
        log.info("mappingPath userId = {}, orderId = {}", userId, orderId);
        return "OK";
    }

특정 파라미터 조건 매핑 (거의 사용X)

/**
     * 파라미터로 추가 매핑
     * params="mode",
     * params="!mode"
     * params="mode=debug"
     * params="mode!=debug ( ! = )
     * prams= {"mode=debug", "data=good"}
     * @return
     */
    @GetMapping(value = "/mapping-param", params = "mode=debug")
    public String mappingParam() {
        log.info("mappingParam");
        return "OK";
    }
  • 파라미터로 해당 정보가 넘어와야지만 요청을 처리한다.

특정 헤더 조건 매핑

/**
     * 파라미터로 추가 매핑
     * headers="mode",
     * headers="!mode"
     * headers="mode=debug"
     * headers="mode!=debug ( ! = )
     * @return
     */
    @GetMapping(value = "/mapping-param", headers = "mode=debug")
    public String mappingHeaders() {
        log.info("mappingHeaders");
        return "OK";
    }
  • 헤더로 해당 정보가 넘어와야 요청을 처리한다.

미디어 타입 조건 매핑

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

Accept 헤더 기반 Media Type

/**
     * Accept 헤더 기반 Media Type
     * produces="text/html"
     * produces="!text/html"
     * produces="text/*"
     * produces="*\/*"
     * @return
     */
    @PostMapping(value = "/mapping-produce", produces = MediaType.TEXT_HTML_VALUE)
    public String mappingProduces() {
        log.info("mappingProduces");
        return "OK";
    }
  • HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑한다.
  • 만악 맞지 않으면 HTTP 406 상태코드 (Not Acceptable)을 반환한다.
profile
Java Back-End 2022.11.01 💻~ing

0개의 댓글