[TIL] 230809 @RequestBody VS @RequestPart

CountryGirl·2023년 8월 9일
0

TIL

목록 보기
38/80

✅ Postman Setting

⭐️ Content type : application/json

postRequestDto

{
    "title" : "test5",
    "content" : "test5",
    "address" : "서울시 용산구 홍길동 23-59",
    "latitude" : 23.33311,
    "longitude" : 13.1234
}

images

이미지 선택 (1~3장)

✏️ @RequestBody PostRequestDto postRequestDto

// PostController
@PostMapping("")
    public ResponseEntity<PostResponseDto> createPost(
            @RequestBody PostRequestDto postRequestDto, 
            @RequestPart("images") List<MultipartFile> images
    ) throws IOException {
        return postService.createPost(postRequestDto, images);
    }

IntelliJ Error

2023-08-09T18:54:48.537+09:00  WARN 80095 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'multipart/form-data;boundary=--------------------------538120508273299913364362;charset=UTF-8' is not supported]

Postman (Status: 415 Unsupported Media Type)

만약 PostRequestDto@RequestBody로 받는다면 위와 같이 Media Type오류가 발생한다.


✏️ @RequestPart PostRequestDto postRequestDto

// PostController
@PostMapping("")
    public ResponseEntity<PostResponseDto> createPost(
            @RequestPart PostRequestDto postRequestDto, 
            @RequestPart("images") List<MultipartFile> images
    ) throws IOException {
        return postService.createPost(postRequestDto, images);
    }

Postman (Status: 200 OK)

RequestPart로 받아야 오류가 생기지 않는다.

@RequestBody는 텍스트 기반의 요청이 들어왔을 때 사용이 되고, 텍스트 기반의 요청과 이미지 파일과 같이 바이너리 데이터를 포함한 데이터가 같이 요청이 들어온다면 한 개의 요청을 여러 부분으로 나누어서 데이터를 처리할 수 있다.
복합적인 데이터 형식인 경우에는 @RequestPart를 사용하는 것이 적합하다.

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글