MultipartFile 과 @RequestPart, @RequestParam, @RequestBody

박영준·2023년 7월 19일
0

Spring

목록 보기
44/58

@RequestPart

  • Content-Type 이 'multipart/form-data' 에 특화된 어노테이션

    • HTTP request body 에 multipart/form-data 가 포함되어 있는 경우에 사용
  • MultipartFile 을 받을 때 사용 가능

    • 단, HttpMessageConverter 가 Content-Type 을 참고하여 알맞는 Converter 로 처리한다
  • MultipartFile 이 포함되는 경우에 MultipartResolver가 동작하여 역직렬화를 하게 된다.
    (역직렬화 : Byte로 되어있는 데이터를 객체 형태로 변환)

  • 단, MultipartFile 이 포함되어있지 않다면, @RequestBody 와 마찬가지로 HttpMessageConverter가 동작된다.

@RequestParam

  • HTTP 요청에서 하나의 파라미터를 받을 때 사용

    • 단순 파라미터 값에 효과적인 어노테이션
  • 기본적으로 파라미터가 필수적으로 들어오게 설정되어 있기 때문에(파라미터 여부가 default로 true),
    파라미터가 들어오지 않을 경우 에러(400 에러)가 발생할 수 있다.

    • 만약, 들어오지 않을수도 있다면 @RequestParam(required = false) 로 설정해주면 된다
  • MultipartFile 을 받을 때 사용 가능

    • 단, 파라미터가 String 이나 MultipartFile 이 아닌 경우, Converter 나 PropertyEditor 에 의해 처리된다

@RequestBody

  • HTTP 요청으로 넘어오는 Body 의 내용을 HttpMessageConverter 를 통해 Java Object로 역직렬화한다
    (HttpMessageConverter : HTTP 요청과 응답에 대해서 "전략 패턴"을 사용해 Converting 해주는 역할)

  • 바이너리 파일을 포함하고 있지 않은 데이터를 받는 역할

  • HTTP 요청으로 같이 넘어오는 Header 의 Content-Type을 보고 어떤 Converter 를 사용할지 정하기 때문에,
    Content-Type 은 반드시 명시해야 한다

    • 자주쓰는 Content-Type 종류
      • application/json : { key : value } 형태인 json 형태로 전송
      • application/x-www-form-urlencoded : name=obo&number=123456 형태인 쿼리 스트링 형태로 전송
      • multipart/form-data : 파일 업로드시 사용되며, 파일을 포함한 여러 데이터가 part(쪼개서) 형식으로 나눠서 전송
  • 많은 데이터를 주고 받을 때는 @RequestBody 와 DTO 를 이용하는 편이 좋다.

    • MultipartFile 을 여러개로 받기 위해선 List<MultipartFile> 형태로 받을 수 있다
    • Map<String, Object> 로 모든 파라미터를 한번에 받을 수 있으나 유지보수성이 떨어짐

참고: @RequestBody, @RequestParam, @RequestPart
참고: [Spring] RequestBody vs RequestParam vs RequestPart vs ModelAttribute

profile
개발자로 거듭나기!

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

글이 많은 도움이 되었습니다, 감사합니다.

답글 달기