관리 메뉴

샐님은 개발중

2. 요청 매핑, 매핑 API 본문

스프링 MVC 1편 -인프런 김영한/섹션6-스프링MVC - 기본 기능

2. 요청 매핑, 매핑 API

샐님 2023. 7. 10. 17:01
728x90
반응형

1. 특정 파라미터, 특정 헤더 조건 등으로 매핑 예시

@RestController 

  - 반환값으로 뷰를 찾는 것이 아니라 HTTP 메세지 바디에 바로 입력한다. 

 

package hello.springmvc.basic.requestmapping;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

@RestController
public class MappingController {

    private Logger log = LoggerFactory.getLogger(getClass());
    @RequestMapping(value = "/hello-basic", method = RequestMethod.GET)
        public String helloBasic(){
        log.info("hellobasic");
        return  "완료!";
        }
    /**
     * 편리한 축약 애노테이션 (코드보기)
     * @GetMapping
     * @PostMapping
     * @PutMapping
     * @DeleteMapping
     * @PatchMapping
     */
    @GetMapping(value = "/mapping-get-v2")
    public String mappingGetV2() {
        log.info("mapping-get-v2");
        return "ok";
    }

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

    }

    /**
     * PathVariable 다중 사용
     */
    @GetMapping("/mapping/{userId}/orders/{orderId}")
    public String mappingPath(@PathVariable String userId, @PathVariable Long orderId){
        log.info("mappingPath userId={}, orderId={}", userId, orderId);
        return "ok";
    }

    /**
     * 특정 헤더로 추가 매핑
     * headers="mode",
     * headers="!mode"
     * headers="mode=debug"
     * headers="mode!=debug" (! = )
     * 
     * Http 헤더에 특정 키와 값이 존재해야 사용가능함.
     */
    @GetMapping(value = "/mapping-header", headers = "mode=debug")
    public String mappingHeader() {
        log.info("mappingHeader");
        return "ok";
    }

    /**
     * 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";
    }
    
    /**
     * 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";
    }
}

2. 요청 매핑 API

 

 

package hello.springmvc.basic.requestmapping;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/mapping/users")
public class MappingClassController {

    /**
     * 회원 관리 API
     * 회원 목록 조회: GET /users
     * 회원 등록: POST /users
     * 회원 조회: GET /users/{userId}
     * 회원 수정: PATCH /users/{userId}
     * 회원 삭제: DELETE /users/{userId}
     * @return
     */
    @GetMapping
    public String users(){
        return "get users";
    }
    @PostMapping
    public String add(){
        return "add users";
    }
    @PatchMapping("/{userId}")
    public String edit(@PathVariable String userId){
        return "edit users="+userId;
    }
    @DeleteMapping("/{userId}")
    public String delete(@PathVariable String userId){
        return "delete user="+userId;
    }

}

 

728x90
반응형