프로젝트 수정 시, 다음과 같은 세 가지 경우가 존재한다.
Content-Type 'application/octet-stream' is not supported.
Content-Type 'application/json' is not supported.
Content-Type 'application/octet-stream' is not supported.
각각의 경우에서 415 Unsupported Media Type
오류가 발생했다
Spring Boot에서 415 Unsupported Media Type
오류가 발생한 이유는 Postman에서 deleteThumbnail 값을 Text로 보내지 않았을 가능성이 크다.
@RequestPart(value = "deleteThumbnail", required = false) Boolean deleteThumbnail,
위와 같이 Boolean을 @RequestPart
로 받을 경우, Spring Boot는 multipart/form-data
에서 Boolean 값을 직접 처리하지 못한다.
true
또는 false
값을 기대하지만, multipart/form-data
는 기본적으로 String 또는 File 형태로 전달된다.false
를 입력해도 내부적으로 application/octet-stream
으로 인식될 수 있다.multipart/form-data
내에서 Boolean 값을 직접 변환하지 못해 오류가 발생한다.💡 즉, Postman이 Boolean 값을 Text가 아닌 application/octet-stream
타입으로 보내면서 Spring Boot가 이를 지원하지 못한 것이다.
String
으로 수신 후 Boolean 변환deleteThumbnail
을 String으로 받고 Boolean으로 변환하여 사용하는 방식으로 해결했다.
@RequestPart(value = "deleteThumbnail", required = false) String deleteThumbnailStr, // ✅ String으로 받기
이제 deleteThumbnail
을 String
으로 받으면서 Postman이 데이터를 반드시 Text 형식으로 보내도록 강제할 수 있다.
"false"
를 Text로 보내면, Spring Boot는 이를 String으로 처리할 수 있다.Boolean deleteThumbnail = deleteThumbnailStr != null && deleteThumbnailStr.equalsIgnoreCase("true");
이 방식은 Spring이 multipart/form-data
를 더 자연스럽게 처리할 수 있도록 도와준다.
multipart/form-data
는 여러 개의 데이터를 각각의 파트로 분리하여 전송하는 방식이다.@RequestPart
를 활용하여 JSON과 파일을 동시에 받을 수 있다.@RequestParam
multipart/form-data
등의 요청 파라미터를 처리할 수 있다.String
이나 multipart/form-data
가 아닐 경우 등록된 Converter 또는 PropertyEditor를 통한 형식 변환에 의존한다.multipart/form-data
에 특화되어 있으며 여러 복잡한 값을 처리할 때 사용할 수 있다.String
또는 MultipartFile/Part
가 아닐 경우, 요청 부분의 Content-Type
헤더를 고려하는 HttpMessageConverters에 의존한다.CommonsMultipartResolver
vs StandardServletMultipartResolver
비교 → CommonsMultipartResolver
는 Apache Commons FileUpload를 기반으로 동작하며, StandardServletMultipartResolver
는 Servlet 3.0의 기본 Multipart 기능을 활용한다.spring.servlet.multipart.enabled
설정 옵션 → true로 설정하면 Spring Boot에서 Multipart 요청을 자동으로 처리할 수 있다.form-data
방식으로 설정하는 방법 → Postman에서 Body 탭에서 form-data
선택 후 Key에 파일명을 지정하고 Type을 File로 설정해야 한다.Text
로 설정해야 하는 이유 → multipart/form-data
에서는 Boolean 값이 기본적으로 지원되지 않으므로 String으로 변환 후 처리해야 한다.@RequestBody
vs @RequestPart
차이점 → @RequestBody
는 JSON 전체 요청을 변환하고, @RequestPart
는 Multipart 요청의 일부로 JSON을 처리한다.HttpMessageConverter
를 활용한 커스텀 변환 적용 방법 → Spring의 MappingJackson2HttpMessageConverter
를 사용하면 JSON을 원하는 객체로 변환할 수 있다.spring.servlet.multipart.max-file-size
) → 너무 큰 파일이 업로드되지 않도록 적절한 크기 제한을 설정해야 한다.Spring Boot에서
multipart/form-data
와 JSON을 함께 처리할 때는@RequestPart
를 사용해야 하며, Boolean 값을@RequestPart
로 받을 경우 String으로 변환한 후 처리하는 것이 안전하다.
Postman에서 데이터를 전송할 때는 반드시
Text
형식으로 보내야 하며,multipart/form-data
를 사용할 경우 각 필드의 타입을 정확하게 지정하는 것이 중요하다.