스프링
MultipartFile With Json
winwin-k9
2023. 4. 3. 02:31
API 에서 Json 과 MultipartFile 을 한번에 전달받는 방법은 무엇이 있을까?
바로 MultipartFile을 사용하는 것이다.
다음의 값들을 한번에 전달받아야 한다고 가정한다.
1. 이름
2. 나이
3. 이미지
@Getter
@ToString
public class CharacterCreateRequest {
private String name;
private Long age;
private MultipartFile image;
}
그렇다면, 위 vo 를 사용한 Post API 가 다음과 같을 때
@RestController
@Slf4j
public class TestController {
@PostMapping("/api/v1/character")
public void saveCharacter(@RequestBody CharacterCreateRequest request) {
...
}
}
과연 Json으로 요청을 받는 것이 가능할까?
정답은 당연히 불가능이다.
@RequestBody 는 데이터 형식을 JSON 형태로 전달받기 때문에.
단순히 vo 내부에 MultipartFile 형태의 필드를 추가했다고해서 해당 값을 @RequestBody 형태로 전달 받을 수 는 없다.
이때는 @RequestPart를 사용해야 한다.
기존 vo 내부에 존재하던 MultipartFile 필드를 제거하고
@Getter
@ToString
public class CharacterCreateRequest {
private String name;
private Long age;
}
API 를 @RequestPart 를 사용해 다음과 같이 변경한다.
@RestController
@Slf4j
public class TestController {
@PostMapping(value = "/api/v1/character", onsumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
public void saveCharacter(@RequestPart CharacterCreateRequest request,
@RequestPart MultipartFile imgFile) {
...
}
}
위와 같은 형태를 사용하면 하나의 API 에서Json 과 MultipartFile 을 한번에 전달받을 수 있다.
특이점으로는 API 에서 consume 할 MediaType 을 지정해줘야 한다는 점 이다.
만약 적절한 MediaType 을 지정하지 않을 경우
415 Unsupported MediaType ERROR 가 발생한다.
728x90