Web

Spring Boot : Multipart(멀티파트)

superbono 2021. 8. 8. 15:01

* Multipart

바이너리 데이터 전송을 위해 사용한다. 예전에는 파일 업로드와 같은 기능 구현을 위해 반드시 외부 라이브러리가 필요했지만, 서블릿 3.0 이후 부터는 서블릿 3.0 이후부터는 서블릿 스펙에 'multipart'가 추가되어서 별도의 라이브러리 없이 구현이 가능해졌다. 

 

* JSON과 파일을 한 request에 보낼 때

1. User POJO 클래스를 만든다. 

 

2. 컨트롤러레 multipart를 적용한다. JSON과 Multipart를 포스트로 받기 위해서 consume 파트에 content type을 명시해야 한다. 

consumes = { MediaType.APPLICATION_JSON_VALUE,MediaType.MULTIPART_FORM_DATA_VALUE })

user가 POJO가 아닌 string인 것을 확인할 수 있다.

그리고 컨트롤러 메소드에 파라미터로 User와 multipart 파일을 넘겨줘야 한다. 보통 POST에서는 @RequestBody를 쓰지만, JSON과 multipart를 동시에 받아야 하므로 어노테이션을 @RequestBody가 아닌 @RequestPart로 변경한다.  이 때, User를 POJO로 받는 것이 아닌, String 으로 받아야 한다. 그리고 서비스로 String을 넘겨서 JSON으로 변환한다.

 

3. 서비스 레이어로 파라미터로 들어온 string을 넘겨서 json으로 만든다. 

ObjectMapper를 사용, string을 json으로 변환한다. 

 

 

이렇게 되면 프론트에서 넘겨줄 때 stringfy해서 보내줘야 하나? 그렇지 않을까 아직 프론트단이랑 연결을 안해봐서 모르겠지만 그럴 것으로 예상된다. 

 

출처 - https://blogs.perficient.com/2020/07/27/requestbody-and-multipart-on-spring-boot/