Spring 요청 매핑

바그다드·2023년 4월 22일
0
post-thumbnail
  • Spring에서는 각 요청에 따라 메서드를 매핑시킬 수 있는데, 각 요청에 따른 메서드 매핑 방법에 대해서 알아보자

1. 주소 매핑

	@RequestMapping({"/hello-basic", "/hello-go"})
    public String helloBasic() {
        log.info("helloBasic");
        return "ok";
    }
  • 메서드의 주소와 일치하면 어떤 http 메서드로도 접근할 수 있다.
  • 배열의 형태로 url을 다중 설정 할 수 있다

2. 메소드 매핑

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

    /**
     * 편리한 축약 애노테이션 (코드보기)
     *
     * @GetMapping
     * @PostMapping
     * @PutMapping
     * @DeleteMapping
     * @PatchMapping
     */
    @GetMapping(value = "/mapping-get-v2")
    public String mappingGetV2() {
        log.info("mapping-get-v2");
        return "ok";
    }
  • 특정 HTTP메서드에만 동작하도록 매핑하는 방법

3. PathVariable 매핑

    /**
     * PathVariable 사용
     * 변수명이 같으면 생략 가능
     *
     * @PathVariable("userId") String userId -> @PathVariable userId
     * /mapping/userA
     * 변수명과 PathVariable의 이름이 같으면 따로 이름을 명시하지 않아도 매핑이 된다
     */
    @GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable("userId") 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";
    }
  • PathVariable을 이용하여 매핑하는 방법

4. 쿼리스트링 매핑

    /**
     * 파라미터로 추가 매핑
     * 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";
    }
  • 쿼리스트링으로 매핑하는 방법
  • 파라미터의 key와 value가 mode에 debug로 이루어져 있는 요청만 매핑됨

5. 헤더 매핑

    /**
     * 특정 헤더로 추가 매핑
     * 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헤더에 mode: debug가 포함된 요청만 매핑

6. 미디어타입 매핑

    /**
     * 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 바디 데이터 형식이 json일 경우에만 매핑

7. Accept 헤더 기반 매핑

    /**
     * Accept 헤더 기반 Media Type
     * produces = "text/html"
     * produces = "!text/html"
     * produces = "text/*"
     * produces = "*\/*"
     */
    @PostMapping(value = "/mapping-produce", produces = MediaType.TEXT_HTML_VALUE)
    public String mappingProduces() {
        log.info("mappingProduces");
        return "ok";
    }
  • 클라이언트 요청의 appept헤더와 일치할 경우에만 매핑하는 방법
  • 요청 헤더에 accept: text/html가 있을 경우에만 매핑
profile
꾸준히 하자!

0개의 댓글