본문 바로가기

Back-End/Spring

[Spring Boot] Json 과 MultipartFile 한 번에 전달받는 API (feat. Postman)

728x90

커뮤니티 게시글을 등록하고 조회하는 API 를 개발하는 도중, 게시글에 업로드할 이미지에 대한 로직을 추가하는 과정에 대해 기록해보려고 합니다.

1.  @RequestPart

게시글의 제목, 내용 등은 Json 형태로 서버로 보내주기 때문에 아래와 같이 @RequestBody 로 해주었습니다. 하지만 이미지 파일을 받아오려면 몇 가지 변경해야할 부분이 있습니다.

@PostMapping("/post")
public ResponseEntity<?> createPost(@Valid @RequestBody ExchangePostDTO exchangePostDTO, BindingResult bindingResult, HttpServletRequest request)

 

이미지를 받아오기 위해 MultipartFile 을 추가하였고, 이렇게 하나의 API 에서 Json 과 MultipartFile 을 한번에 받아오기 위해 consumeMediaType 을 지정해주고, @RequestBody 를 @RequestPart 로 바꾸어줍니다. 이 때, 적절한 MediaType 을 지정하지 않았을 경우, '415 Unsupported MediaType ERROR' 가 발생하게 됩니다.

@PostMapping(value = "/post", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<?> createPost(@Valid @RequestPart ExchangePostDTO exchangePostDTO, @RequestPart(value = "images", required = false) List<MultipartFile> imageFiles, BindingResult bindingResult, HttpServletRequest request)

 

이렇게 한번에 Json 과 MultipartFile 을 받아오기 위해 컨트롤러 부분을 수정해주었습니다. 개발한 API 가 잘 동작하는지 Postman 을 통해서 테스트해보겠습니다.

 

2.  Postman 테스트

아래와 같이 POST 와 url 을 설정해준 다음, Body 탭에서 form-data 를 선택합니다. Json 에 해당하는 Value 를 Json 형식으로 알맞게 입력한 후, Content type 을 application/json 으로 설정해줍니다.

이미지의 경우, 아래와 같이 File 을 선택하여 Value 에서 이미지 파일을 선택해줍니다. Content type 은 multipart/form-data 로 설정해줍니다.

Postman 테스트 화면
File 선택

 

다음과 같이 잘 동작하는 것을 확인할 수 있습니다.

API 정상적으로 동작

 

728x90