ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링MVC - 1편] 스프링 MVC 기본기능 - 요청 매핑
    스프링&스프링부트 2025. 1. 28. 14:03

    요청 매핑

    MappingController

    @RestController
    public class MappingController {
        private final Logger log = LoggerFactory.getLogger(getClass());
    
        @RequestMapping("/hello-basic")
        public String helloBasic() {
            log.info("helloBasic");
            return "ok";
        }
    }

    @RequestMapping("/hello-basic")

    /hello-basic URL 호출이 오면 메서드가 실행되도록 매핑한다

    대부분의 속성을 배열[] 제공하므로 {"/hello-basic", "/hello-go"}와 같이 다중 설정이 가능하다

     

     

     

    HTTP 메서드

    @RequestMapping method속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다

    (모두 허용 - GET, HEAD, POST, PUT, PATCH, DELETE )

     

     

     

    HTTP 메서드 매핑

    /**
     * method 특정 HTTP 메서드 요청만 허용
     * GET, HEAD, POST, PUT, PATCH, DELETE
     */
    @RequestMapping(value = "/hello-basic", method = RequestMethod.GET)
    public String helloBasic() {
        log.info("helloBasic");
        return "ok";
    }

     

     

     

    HTTP 메서드 매핑 축약

    /**
     * 편리한 축약 애노테이션 (코드보기)
     * @GetMapping
     * @PostMapping
     * @PutMapping
     * @DeleteMapping
     * @PatchMapping
     */
    @GetMapping(value = "/mapping-get-v2")
    public String mappingGetV2() {
        log.info("mapping-get-v2");
        return "ok";
    }

     

     

     

    PathVariable(경로 변수) 사용

    /**
     * PathVariable 사용
     * 변수명이 같으면 생략 가능
     * @PathVariable("userId") String userId -> @PathVariable String userId
     */
    @GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable("userId") String data) {
        log.info("mappingPath userId={}", data);
        return "ok";
    }

    최근 HTTP API 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호한다

    • @RequestMapping은 URL 경로를 템플릿화   있는데, @PathVariable을 사용하면 매칭되는 부분을 편리하게 조회할 수 있다
    • @PathVariable의 이름과 파라미터 이름이 같으면 생략할  있다

     

     

     

    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="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="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, 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 요청 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";
    }

     

     

     

    요청 매핑 - API 예시

    회원 관리를 HTTP API 만든다 생각하고 매핑을 어떻게 하는지 알아본다

     

    회원 관리 API

    • 회원 목록 조회 : GET `/users`
    • 회원 등록 : POST `/users`
    • 회원 조회 : GET `/users/{userId}`
    • 회원 수정 : PATCH `/users/{userId}`
    • 회원 삭제 : DELETE `/users/{userId}`

     

     

     

    MappingClassController

    @RestController
    @RequestMapping("/mapping/users")
    public class MappingClassController {
    
        @GetMapping
        public String users() {
            return "get users";
        }
    
        @PostMapping()
        public String addUser() {
            return "post user";
        }
    
        @GetMapping("/{userId}")
        public String findUser(@PathVariable String userId) {
            return "get userId = " + userId;
        }
    
        @PatchMapping("/{userId}")
        public String updateUser(@PathVariable String userId) {
            return "update userId = " + userId;
        }
    
        @DeleteMapping("/{userId}")
        public String deleteUser(@PathVariable String userId) {
            return "delete userId = " + userId;
        }
    
    }
    728x90
Designed by Tistory.