@RequestPart 알아보기

2025. 2. 12. 10:56·Spring

📌1.  @RequestPart란?

@RequestPart는 멀티파트 요청 (multipart request) 에서 특정 파일이나 JSON 데이터를 개별적으로 매핑할 때 사용되는 Spring MVC의 어노테이션입니다.


2. @RequestParam vs @RequestBody vs @RequestPart 차이점

어노테이션 사용 대상 주요 목적 Content-Type

@RequestParam 단순 파라미터 (쿼리 스트링, 폼 데이터) 기본 데이터 타입 (String, int 등) 전송 application/x-www-form-urlencoded
@RequestBody JSON 요청 본문 객체로 변환 (DTO 등) application/json
@RequestPart 멀티파트 요청 (파일 + JSON) 파일과 JSON 데이터를 함께 받기 multipart/form-data

 


3. @RequestPart 사용 예제

📌 파일과 JSON 데이터를 동시에 받는 경우

@RestController
@RequestMapping("/posts")
public class PostController {

    @PostMapping("/write")
    public ResponseEntity<String> writePost(
            @RequestPart("postDto") PostDto postDto, // JSON 데이터
            @RequestPart(value = "file", required = false) MultipartFile file // 파일 (선택)
    ) {
        log.info("게시글 작성: {}", postDto);
        
        if (file != null) {
            log.info("첨부된 파일: {}", file.getOriginalFilename());
        }

        return ResponseEntity.ok("게시글 작성 완료!");
    }
}

요청 예시 (Postman)

multipart/form-data로 요청

POST /posts/write
Content-Type: multipart/form-data

postDto: {"title": "Hello", "content": "This is a post"}
file: (image.jpg 첨부)

📌 Spring은 postDto를 JSON으로 변환하고, file을 MultipartFile로 처리.

 


4. @RequestPart가 필요한 이유

@RequestBody로 JSON과 파일을 동시에 받을 수 없는 문제

@PostMapping("/write")
public ResponseEntity<String> writePost(@RequestBody PostDto postDto, MultipartFile file) {
    // ❌ 실행되지 않음: @RequestBody는 JSON 요청만 처리할 수 있음
}
  • @RequestBody는 Content-Type: application/json을 기대하기 때문에 multipart/form-data를 처리하지 못함
  • 파일과 JSON을 동시에 받으려면 @RequestPart를 사용해야 함

정리

- @RequestPart는 multipart/form-data 요청에서 파일과 JSON 데이터를 함께 처리할 때 사용
- @RequestParam과 달리 JSON 데이터를 DTO로 변환 가능

- @RequestBody는 application/json에서만 동작하므로 멀티파트 요청과 함께 사용할 수 없음
- @RequestPart(value = "file", required = false)로 파일을 선택적으로 받을 수도 있음

 즉, @RequestPart는 파일과 JSON을 동시에 받아야 할 때 가장 적절한 방법!

'Spring' 카테고리의 다른 글

Spring Security + JWT  (1) 2025.02.21
Ports and Adapter 패턴 (Hexagonal)  (0) 2025.02.17
열어봐요 @RequestBody로 데이터 받는 과정  (0) 2025.02.10
@RequestBody 와 <form> 태그  (1) 2025.02.05
Spring Pageable 안 쓰면 바보  (1) 2025.01.31
'Spring' 카테고리의 다른 글
  • Spring Security + JWT
  • Ports and Adapter 패턴 (Hexagonal)
  • 열어봐요 @RequestBody로 데이터 받는 과정
  • @RequestBody 와 <form> 태그
힐안
힐안
나 지금 학비 내면서 개발 독학하잖아.
  • 힐안
    후라이
    힐안
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • HTTP (9)
      • Spring (28)
        • 웹 게시판 (4)
      • Neural Network (1)
        • CNN (1)
        • RNN (0)
      • Deep Learning (6)
      • Audio (3)
      • 알고리즘(JAVA) (2)
      • 백준 (10)
        • Bronze (0)
        • Silver (2)
        • Gold (8)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    비지도학습
    자바
    오블완
    딥러닝
    웹
    JSON
    GAN
    최단경로알고리즘
    플로이드와샬
    티스토리챌린지
    HTTP
    dcgan
    API
    Genrative_model
    Spring
    MNIST
    백준
    스프링부트
    백엔드
    벨만포드
    다익스트라
    springboot
    프레임워크
    web
    MVC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
힐안
@RequestPart 알아보기
상단으로

티스토리툴바