<aside>
multipart/form-data
서버로 파일을 전송해야 하거나, 파일과 데이터를 함께 전송해야할 때 사용하는 HTTP 요청 방식
</aside>
<aside>
사용 이유
MultipartFile을 자동으로 파싱하기 위함이다.
</aside><aside>
요청 구조
Content-Type: multipart/form-data; boundary=----XYZ123
------XYZ123
Content-Disposition: form-data; name="image"; filename="a.png"
Content-Type: image/png
(binary data)
------XYZ123
Content-Disposition: form-data; name="accountId"
12345
------XYZ123
Content-Disposition: form-data; name="accessToken"
abcd-efgh-token
------XYZ123--
</aside>
@ModelAttribute<aside>
스프링 MVC에서 클라이언트로부터 전달된 데이터를 컨트롤러 메서드의 파라미터 객체로 자동 바인딩해주는 어노테이션이다.
주로 HTML 폼 전송이나 multipart/form-data 요청을 처리할 때 사용된다.
단, JSON 바디를 처리할 때는 사용하지 않는다.
</aside>
consumes = MediaType.MULTIPART_FORM_DATA_VALUE<aside>
스프링 MVC에서 컨트롤러 메서드가 어떤 Content-Type의 요청만 처리할지 명시하는 옵션이다.
@PostMapping, @GetMapping 등에서 사용 가능하며, 지정한 Content-Type과 일치하지 않는 요청이 들어오면 스프링 HTTP 415 Unsupported Media Type 에러를 반환한다.
즉, 컨트롤러 메서드가 처리할 요청 데이터 형식을 제한하는 안정장치 역할을 한다.
</aside>
<aside>
multipart/form-data 형식)에서 consumes = MediaType.MULTIPART_FORM_DATA_VALUE를 선언하지 않을 때 발생하는 문제multipart/form-data로 전송해도 스프링이 이를 제대로 인식하지 못할 수 있음null 값이 들어오거나 오류 발생 가능.@ModelAttribute 로 전달된 데이터를 컨트롤러 메서드의 파라미터 객체로 자동 바인딩하게되면 발생하는 문제@ModelAttribute는 기본적으로 폼 데이터(x-www-form-urlencoded)나 multipart/form-data 요청의 파라미터를 객체로 바인딩하는 용도임.application/json)이면 스프링은 이를 바인딩할 수 없으므로,
null이 들어가고,@RequestBody를 사용해야 함.
</aside>