[HTTP] multipart/form-data 와 @RequestBody, @ModelAttribute 관계

sun·2025년 3월 5일
0

이슈

목록 보기
4/4

1. 이슈 내용

나는 SpringBoot로 API 개발을 하고있었다.
게시글 등록을 구현 후 Swagger로 테스트 했는데 아래와 같은 상태코드가 반환되었다.
status : 415
error : Unsupported Media Type

2. 왜 이런..?

나는 Controller 에서 consumes = MediaType.MULTIPART_FORM_DATA_VALUE로 지정하여 요청을 multipart/form-data 형식으로 보내겠다고 지정했다.
그리고 데이터를 받아올 때 @RequestBody 로 받아오라고 지정했다.
결론부터 말하면 @RequestBody 로 받아온 것이 문제였다.
@RequestBodymultipart/form-data 형식을 처리할 수 없기 때문에 415 에러가 발생했다.

✒️ @RequestBody와 @ModelAttribute의 차이점

@RequestBody@ModelAttribute 는 서로 다른 방식으로 요청 데이터를 처리한다.
@RequestBody 는 HTTP 요청의 본문(body) 데이터를 바인딩하고, @ModelAttribute 는 폼 데이터와 같은 요청 파라미터를 객체에 바인딩하는 데 사용된다.

@RequestBody

  • JSON, XML, 텍스트 등 요청 본문에 포함된 데이터를 객체로 변환하는 데 사용
  • application/json이나 application/xml 같은 Content-Type과 함께 사용

@ModelAttribute

  • 폼 데이터를 객체에 바인딩하는 데 사용
  • multipart/form-data로 전송된 데이터를 객체의 필드에 매핑가능
  • 폼 데이터 내에서 파일뿐만 아니라 일반 텍스트 값도 함께 받을 수 있음

3. 해결

@RequestBody 대신 @ModelAttribute 를 사용했더니 정상적으로 실행되었다.

profile
Please, Steadily

0개의 댓글

관련 채용 정보