| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- javascript
- 알고리즘
- mysql
- CSS
- 운영체제
- CS
- redis
- PYTHON
- websocket
- OS
- 트랜잭션
- jpa
- 프로그래머스
- Docker
- java
- nosql
- Data structure
- 완전탐색
- 영속성 컨텍스트
- It
- db
- 자료구조
- DFS
- 트러블슈팅
- 백준
- HTML
- 데이터베이스
- Algorithm
- BFS
- spring
Archives
- Today
- Total
If at first you don't succeed, try again
[트러블슈팅] 게시물 작성에서 사진 업로드 시 발생했던 문제 본문
* 개요
정말 오랜만에 글을 쓴다. 왜 오랜만에 글을 쓰냐면...
사이드 프로젝트 2개를 동시에 진행하느라 블로그에 글을 쓸 여유가 없었다ㅜㅜ
사이드 프로젝트를 진행하면서 발생했던 문제들과 해결 과정을 적고자 한다.
먼저 가장 먼저 발생했던 문제는 사진 업로드였다.
* 문제 상황
@PostMapping
public ResponseEntity<PostResponse> createPost(
@AuthenticationPrincipal CustomUserDetails userDetails,
@RequestBody PostCreateRequest request,
@RequestBody List<MultipartFile> imageFiles
) {
PostResponse response = postService.create(userDetails, request, imageFiles);
return ResponseEntity.ok(response);
}
게시글 작성 시 JSON 데이터와 사진의 파일 업로드를 동시에 진행해야 하는 상황이었는데 @RequestBody만으로는 해결할 수가 없었다. @RequestBody로 사진 업로드를 하려고 하면 다음과 같은 에러가 발생한다.
org.springframework.http.converter.HttpMessageNotReadableException:
Required request body is missing
* 원인
@RequestBody는 application/json 타입과 같은 JSON 요청 본문을 처리하기 위해 사용된다.
반면 multipart/form-data는 파일 업로드와 함께 텍스트 필드를 전송할 때 사용된다.
따라서 호환이 되지 않아 발생하는 에러였다.
* 해결 방법
@RequestBody 대신 @RequestPart라는 어노테이션을 사용했다.
@PostMapping
public ResponseEntity<PostResponse> createPost(
@AuthenticationPrincipal CustomUserDetails userDetails,
@RequestPart("request") PostCreateRequest request,
@RequestPart(value = "imageFiles", required = false) List<MultipartFile> imageFiles
) {
PostResponse response = postService.create(userDetails, request, imageFiles);
return ResponseEntity.ok(response);
}
@RequestPart 는 multipart/form-data 타입의 특정 파트를 추출해서 바인딩하는 데에 사용된다.
MultipartFile이 포함되어 있는 경우, MultipartResolver가 동작하여 역직렬화를 하게 된다.
'개발 > 트러블슈팅' 카테고리의 다른 글
| [트러블슈팅] 커서 기반 무한 스크롤의 댓글 수, 좋아요 수를 조회하는 쿼리에서 발생했던 성능 문제(feat. N+1) (0) | 2025.06.04 |
|---|---|
| [트러블슈팅] 엔티티에 @ToString 사용으로 인한 순환참조(feat. JPA) (0) | 2025.06.04 |
| [트러블슈팅] DTO 필드 변수의 prefix 이슈 (0) | 2025.06.04 |
| [트러블슈팅] Gradle 버전 문제 (0) | 2023.10.05 |