파일 업로드가 필요한 Controller에 MediaType 명시해주기

후투티·2025년 6월 10일

잊지마!

목록 보기
20/20

프로필 등록/수정 API를 만들어두고
잘 되려니~ FE께서 어련히 잘 하고 계시려니~ 하고 있었는데
FE 개발자님의 잔뜩 지친 디엠 하나..

프로필 사진 등록/수정
multipart/form-data 이걸로 되어있나요?
스웨거에 나와있는대로
application/json 으로
{
"file": "string"
}
이렇게 보내니 안 돼요

descrption에 "파일 업로드"라고 적어둬서 어련히 알아서 하시는 줄 알았지만
API 명세서 대로 작업하시는 분들이었음 ㅠ 죄송.... 송구...

오른쪽 중단에 보면 application/json이라고 나와있어서
요청 바디에 json으로 계속 요청을 하셨는데 안 되셨던 거였다.
FE께서 이런 저런 삽질을 하다가 content-type에 대해 알아보고
혼자 해결을 하셨다고 하여 더욱 송구...... 미리 말씀을 드릴 걸......

이게 본래 코드였는데 스웨거 설정을 더 추가해줬다.

  @Operation(summary = "프로필사진 등록/수정")
  @PutMapping(value = "/profile-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  public ResponseEntity<Map<String, String>> updateProfileImage(
      @Parameter(description = "프로필 사진 파일")
      @RequestPart("file") MultipartFile file) {
    String profileImageUrl = profileImageService.updateProfileImage(file);
    Map<String, String> profileResponse = new HashMap<>();
    profileResponse.put("profileImageUrl", profileImageUrl);
    return ResponseEntity.ok(profileResponse);
  }

이렇게 컨트롤러쪽에 consumes를 추가하여 multipart/form-data로 넣으라고 명시를 해주고, 어떤 파일을 넣어야 하는지 Parameter(description = "~~~")로 설명해주었다.
그러면 이제 스웨거는 이렇게 나온다.

FE 개발자가 삽질하지 않도록 API 명세서를 상세하게 잘 써주자...!

profile
모르는 건 모른다고 하는 사람

0개의 댓글