Backend/Spring Framework

[Spring Boot] 컨트롤러에서 Multipart/form-data 처리 방법과 유의점

mopil 2022. 7. 26. 22:22
반응형

서버에 파일이나 이미지를 업로드 하고 싶으면 Multipart/form-data 형식으로 HTTP 메시지를 작성해야한다.

 

다음은 몇 가지 주안점이다.

  • Multipart/form-data 는 무조건 POST 요청으로 들어간다. 따라서 파일이나 이미지를 첨부한 update를 구현하고 싶으면 PUT 요청이 아닌 POST 요청으로 처리하자.
  • Multipart/form-data는 @RequestBody가 아닌, @ModelAttribute로 받자.

만약,

Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=--------------------------651322644999616177014511;charset=UTF-8' not supported]

이런 오류가 발생한다면, Multipart/form-data를 @RequestBody로 받아서 발생하는 문제다. (JSON으로 변환을 못하기 때문)

 

# 이미지를 포함한 DTO를 받고 싶을 때

data class ItemCategoryRequest(
    var categoryName: String = "",
    var image: MultipartFile,
)

 

// 제품 카테고리 수정
@PostMapping("/item/{categoryId}")
fun updateItemCategory(
    @PathVariable("categoryId") categoryId: Long,
    @ModelAttribute form: ItemCategoryRequest)
= ItemCategoryListResponse(
    categoryService.updateItemCategory(categoryId, form).map { convertItemDto(it) }
)

이렇게 @ModelAttribute로 받으면 된다.

반응형