[Spring] @RequestPart vs @RequestParam vs @RequestBody

2024. 10. 11. 10:56·Back-end/Spring
반응형

@RequestPart

  • Content-Type 이 'multipart/form-data' 에 특화된 어노테이션
    • HTTP request body 에 multipart/form-data 가 포함되어 있는 경우에 사용

 

  • MultipartFile 을 받을 때 사용 가능
    • 단, HttpMessageConverter 가 Content-Type 을 참고하여 알맞는 Converter 로 처리한다

 

  • MultipartFile 이 포함되는 경우에 MultipartResolver가 동작하여 역직렬화를 하게 된다.
    (역직렬화 : Byte로 되어있는 데이터를 객체 형태로 변환)
단, MultipartFile 이 포함되어있지 않다면, @RequestBody 와 마찬가지로 HttpMessageConverter가 동작된다.

@RequestParam

  • HTTP 요청에서 하나의 파라미터를 받을 때 사용
    • 단순 파라미터 값에 효과적인 어노테이션

 

  • 기본적으로 파라미터가 필수적으로 들어오게 설정되어 있기 때문에(파라미터 여부가 default로 true),
    파라미터가 들어오지 않을 경우 에러(400 에러)가 발생할 수 있다.
    • 만약, 들어오지 않을수도 있다면 @RequestParam(required = false) 로 설정해주면 된다

 

  • MultipartFile 을 받을 때 사용 가능
    • 단, 파라미터가 String 이나 MultipartFile 이 아닌 경우, Converter 나 PropertyEditor 에 의해 처리된다

@RequestBody

  • HTTP 요청으로 넘어오는 Body 의 내용을 HttpMessageConverter 를 통해 Java Object로 역직렬화한다
    (HttpMessageConverter : HTTP 요청과 응답에 대해서 "전략 패턴"을 사용해 Converting 해주는 역할)

 

  • 바이너리 파일을 포함하고 있지 않은 데이터를 받는 역할

 

  • HTTP 요청으로 같이 넘어오는 Header 의 Content-Type을 보고 어떤 Converter 를 사용할지 정하기 때문에,
    Content-Type 은 반드시 명시해야 한다
    • 자주쓰는 Content-Type 종류
      • application/json : { key : value } 형태인 json 형태로 전송
      • application/x-www-form-urlencoded : name=obo&number=123456 형태인 쿼리 스트링 형태로 전송
      • multipart/form-data : 파일 업로드시 사용되며, 파일을 포함한 여러 데이터가 part(쪼개서) 형식으로 나눠서 전송

 

  • 많은 데이터를 주고 받을 때는 @RequestBody 와 DTO 를 이용하는 편이 좋다.
    • MultipartFile 을 여러개로 받기 위해선 List<MultipartFile> 형태로 받을 수 있다

 

 

참고

https://velog.io/@hwan2da/Spring-RequestBody-vs-RequestParam-vs-RequestPart-vs-ModelAttribute

반응형

'Back-end > Spring' 카테고리의 다른 글

[Spring] AWS SageMaker 엔드포인트 연결 시도하기  (0) 2024.11.23
[Spring] self-hosted Runner를 통한 CI/CD 배포  (0) 2024.11.21
[Spring] Spring Boot에서 Google Meet API 적용해보기  (11) 2024.10.06
[Spring] JWT + Redis를 활용한 로그아웃 구현 (Jwt BlackList)  (4) 2024.10.06
[Spring] Query Parameter vs Path Variable  (2) 2024.10.02
'Back-end/Spring' 카테고리의 다른 글
  • [Spring] AWS SageMaker 엔드포인트 연결 시도하기
  • [Spring] self-hosted Runner를 통한 CI/CD 배포
  • [Spring] Spring Boot에서 Google Meet API 적용해보기
  • [Spring] JWT + Redis를 활용한 로그아웃 구현 (Jwt BlackList)
류건
류건
개발 일지
  • 류건
    건's Dev
    류건
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Back-end (55)
        • Spring (30)
        • Nest.js (3)
        • Next.js (2)
        • Node.js (3)
      • Infra & Cloud (20)
        • Cloud Computing (6)
        • Docker (3)
        • AWS (7)
      • Java (2)
      • Computer Science (12)
        • Computer Network (0)
        • Operating System (0)
        • 정보 보호와 시스템 보안 (12)
      • 회고록 (1)
        • 우아한테크코스 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    EC2
    aws
    WebClient
    Kafka
    JPA
    express.js
    Nest.js
    Spring Boot
    Lock
    ddl-auto
    오블완
    node.js
    JWT
    ssl
    public key
    Spring
    티스토리챌린지
    Webflux
    db
    보안
    Docker
    Github Actions
    정보보호
    고가용성
    CI/CD
    https
    어노테이션
    nginx
    CD
    CORS
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
류건
[Spring] @RequestPart vs @RequestParam vs @RequestBody
상단으로

티스토리툴바