UL :)
UL의 개발 블로그
UL :)
전체 방문자
오늘
어제
  • 분류 전체보기 (220)
    • 일상 (1)
    • 회고록 (7)
    • ChatGPT 아카이빙 (0)
    • PS(Java) (114)
      • 백준 (37)
      • 인프런 강의 문제 (77)
    • Web (69)
      • Spring (18)
      • JPA (7)
      • JSP (9)
      • HTML5 (12)
      • CSS (19)
      • HTTP (0)
      • 보안 (2)
    • Language (5)
      • Java (3)
      • JS (1)
      • Python (1)
    • Git, GitHub (4)
    • Settings (18)
      • IntelliJ (7)
      • Eclipse (2)
      • VSCode (3)
      • Android Studio (1)
      • VMware (2)
      • Mac (0)
    • Etc (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • EntityManagerFactory
  • 백준
  • IDENTITY 전략
  • consumes
  • @JoinColumn
  • 요청헤더
  • @ManyToOne
  • JPA
  • HttpMessageConverter
  • ORM
  • TABLE 전략
  • ViewName반환
  • HandlerMethodArgumentResolver
  • 엔티티 매핑
  • produces
  • @GetMapping
  • ReturnValueHandler
  • 동일성보장
  • 영속성
  • 정렬
  • @Column
  • 영속성컨텍스트
  • argumentresolver
  • SEQUENCE 전략
  • @Id
  • BOJ
  • @Table
  • 1차 캐시
  • @RequestParam
  • @PostMapping

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
UL :)

UL의 개발 블로그

[Inflearn] 스프링 MVC (4) 요청 매핑
Web/Spring

[Inflearn] 스프링 MVC (4) 요청 매핑

2022. 1. 28. 01:31

김영한 강사님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의 정리

2022.01.27 진행

강의를 듣고 개인적으로 정리한 글입니다. 코드와 그림 출처는 김영한 강사님께 있습니다. 문제 있을 시 알려주세요.

특정 파라미터 조건 매핑, 특정 헤더 조건 매핑은 생략하였음

1. PathVariable(경로 변수) 매핑

최근 HTTP API는 리소스 경로에 식별자를 넣는 다음과 같은 스타일을 선호하고, 실무에서 이런 스타일의 URL 경로를 정말 많이 쓴다고 한다.

  • /mapping/userA
  • /users/1
    /**
     * PathVariable 사용
     * 변수명이 같으면 생략 가능
     *
     * @PathVariable("userId") String userId -> @PathVariable userId
     * /mapping/userA
     */
    @GetMapping(value="/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의 이름과 파라미터 이름이 같으면 생략 가능
  • @RequestMapping은 URL 경로를 템플릿화 할 수 있는데 @PathVariable을 사용하면 매칭되는 부분을 편리하게 조회 할 수 있다.

Postman Test

 

2. 미디어 타입 조건 매핑

2.1. 요청 헤더의 Content-Type 기반 매핑 - consumes

HTTP요청의 Content-Type (미디어 타입)에 따라 다르게 처리해야할 때에는 consumes을 사용한다.

  • Content-Type(client가 보낼 content 타입이 명시됨) → consumes(controller가 소비할 content 타입이 명시됨)
  • 즉 HTTP 헤더의 Content-Type이 controller의 consumes와 일치해야 호출된다.
    /**
     * 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";
    }

Postman Test

​

Body에서 JSON을 선택하고 데이터를 넣으면 자동으로 Content-type이 설정된다.

​

 

2.2. 요청 헤더의 Accept 기반 매핑 - produces

HTTP요청의 Accept에 따라 다르게 처리해야할 때에는 produces를 사용한다.

  • Accept(client가 받아들일 수 있는 content 타입이 명시됨) → produces(controller가 생산하는 content 타입이 명시됨)
  • 즉 HTTP 헤더의 Accept가 controller의 produces와 일치해야 호출된다.
/**
* 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";
}

Postman Test

 

3. API 예시

회원 관리 예제로 URL 매핑을 어떻게 하는지 알아보자

※ 데이터는 안다루고 URL 매핑만 해볼 것임

  • 회원 목록 조회: GET /users
  • 회원 등록: POST /users
  • 회원 조회: GET /users/{userId}
  • 회원 수정: 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;
    }
}

Postman Test

  1. 회원 목록 조회

​
2. 회원 등록

​
3. 회원 조회

​
4. 회원 수정

​
5. 회원 삭제

저작자표시 비영리 변경금지

'Web > Spring' 카테고리의 다른 글

[Inflearn] 스프링 MVC (6) HTTP 응답  (0) 2022.01.31
[Inflearn] 스프링 MVC (5) HTTP 요청  (0) 2022.01.28
[Inflearn] 스프링 MVC (3) 로깅  (0) 2022.01.27
[Inflearn] 스프링 MVC (2) 구조 이해  (0) 2022.01.27
[Inflearn] 스프링 MVC (1) MVC 프레임 워크 만들기  (0) 2022.01.26
    'Web/Spring' 카테고리의 다른 글
    • [Inflearn] 스프링 MVC (6) HTTP 응답
    • [Inflearn] 스프링 MVC (5) HTTP 요청
    • [Inflearn] 스프링 MVC (3) 로깅
    • [Inflearn] 스프링 MVC (2) 구조 이해
    UL :)
    UL :)
    백엔드 개발자를 목표로 달리고 있습니다🔥

    티스토리툴바