본문 바로가기
Spring/스프링 MVC

[스프링 MVC 1편] 6 - (2) 스프링 MVC 요청 매핑

by Poorm 푸름 2023. 11. 23.

 *  스프링 입문 = window, 스프링 MVC 1편 = Mac 으로 진행합니다

 *  진도 : 섹션6 - (3)~(4)

 *          : 자바 클래스명,         : 코드,         : 단축키

 

1. 요청 매핑 
[ src - main - resources - requestmapping - MappingController ]

 

 1) 로깅 설정하고 HTTP 메서드 속성을 정해보자!

  • @RequestMapping 에 method 속성으로 HTTP 메서드를 지정하기

  • 종류 : GET, HEAD, POST, PUT, PATCH, DELETE

@RestController
public class MappingController {
    private Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping(value = "/hello-basic", method = RequestMethod.GET)
    public String helloBasic(){
        log.info("helloBasic");
         return "ok";

    }

    @RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET)
    public String mappingGetV1() {
        log.info("mappingGetV1");
        return "ok";
    }

 

  1. @RestController

    • 반환값(= return)을 @Controller는 뷰로 연결, RestController 문자로 연결

    • HTTP 메시지 바디에 바로 입력 → 따라서 실행 결과로 ok 메세지

  • 로그 선언 private Logger log  ~

  1. 요청 정보 매핑 @RequestMapping

    • 요청 정보를 매핑 (해당 URL이 호출되면 이 메서드가 호출)

    • 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 아무거나 Ok
  • 로그 출력 log.~

 

 2) HTTP 메서드 속성 설정을 깔끔하게 표기

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

 

  1. 편리한 축약 애노테이션 종류

    • @GetMapping
    • @PostMapping
    • @PutMapping
    • @DeleteMapping
    • @PatchMapping

 

 3) 경로 자체에 데이터 넣어보기

    @GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable("userId")String data){
        log.info("mappingPath userId={}", data);
        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(경로 변수) 다중 사용
    한 번에 변수 여러개 넣기 (userId, orderId)

  • @PathVariable 의 이름과 파라미터 이름이 같으면 생략 가능

    @PathVariable("userId") String userId → @PathVariable String userId

 

3) 특정 파라미터 조건 매핑

    @GetMapping(value = "/mapping-param", params = "mode=debug")
    public String mappingParam() {
        log.info("mappingParam");
        return "ok";
    }

 

  • url에 파라미터 정보 넣어야 실행가능
    http://localhost:8080/mapping-param?mode=debug 
  1. 종류
    • params = "mode"
    • params = "!mode"
    • params = "mode=debug"
    • params = "mode!=debug" (! = )
    • params =  {"mode=debug","data=good"}

 

 4) 특정 헤더 조건 매핑

    @GetMapping(value = "/mapping-header", headers = "mode=debug")
    public String mappingHeader() {
        log.info("mappingHeader");
        return "ok";
    }

 

 

  1. Postman에서 http://localhost:8080/mapping-header 검색 후 헤더에 Key = mode, Value = debug 설정해야 실행된다

  2. 종류
    • headers="mode"
    • headers="!mode"
    • headers="mode=debug"
    • headers="mode!=debug" (! = )

 

 5) 미디어 타입 조건 매핑

 < Content-Type의 헤더 정보 consume >

    @PostMapping(value = "/mapping-consume", consumes = "application/json")
    public String mappingConsumes() {
        log.info("mappingConsumes");
        return "ok";
    }

 

  1. Postman에서 http://localhost:8080/mapping-consume 검색 후 Body - raw - 타입 설정하면 Header - Content-Type 변경된다
  2. 종류
    • consumes="application/json"
    • consumes="!application/json"
    • consumes="application/*"
    • consumes="*\/*"
    • consumes = MediaType.TEXT_PLAIN_VALUE

 

< Accept의 헤더 정보 produce >

    @PostMapping(value = "/mapping-produce", produces = "text/html")
    public String mappingProduces() {
        log.info("mappingProduces");
        return "ok";
    }

 

 

  1. Postman에서 http://localhost:8080/mapping-produce 검색 후 Header - Accept에 text/html 넣어주면 실행된다

  2. 종류
    • produces="text/html"
    • produces="!text/html"
    • produces="text/*"
    • produces="*\/*"
    • produces = MediaType.TEXT_PLAIN_VALUE

 

 

2. 요청 매핑 예시 _ API
[ src - main - resources - requestmapping - MappingClassController ]

 

  • 회원 관리 API 종류

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

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

    @GetMapping
    public String user(){
        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;
    }

    
}

 

  • @GetMapping / @PostMapping / @PatchMapping / @DeleteMapping

    • 각 메서드 타입을 따로 정한다

  • @RequestMapping(경로)

    • 공통된 경로 따로 빼주기

    • 요청 정보를 매핑 (해당 URL이 호출되면 이 메서드가 호출)

  • @PathVariable(경로 변수) 사용

    @PathVariable 의 이름과 파라미터 이름이 같으면 생략 가능

    @PathVariable("userId") String userId → @PathVariable String userId

 

 

 

 

 

[출처] 김영한 강사님 인프런 스프링 MVC 1편

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com