728x90
반응형
개요
정확한 내용은 아니다. 그런데 찾아봐도 답이 없는 것 같아서 기록해둔다.
상황
스프링 부트 및 Swagger를 사용하여 컨트롤러에서 입력 객체(po)와 파일 업로드 리스트를 동시에 받아야하는 상황이 생겼다.
@PostMapping(value = "send/mms/{type}", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<?> sendMms(
@Parameter(
...
)
@PathVariable("type") @ValidType(prefix = "mms") String type,
@RequestPart MmsPo po,
@Parameter(
description = """
...
""",
content = @Content(
mediaType = MediaType.MULTIPART_FORM_DATA_VALUE,
schema = @Schema(
type = "array"
)
)
)
@Size(max = 3, message = "첨부 이미지는 최대 3개까지 가능")
@RequestPart List<MultipartFile> files) {
... 로직 진행
}
이 때 파일들을 인코딩하여 po에 String 형태로 담아줄 것이 아니라면(인코딩, 디코딩이 필요하고 Base64로 인코딩하면 용량이 33% 정도 증가하므로 권장하지 않음) List<MultipartFile>로 파일들을 받아야한다. 이렇게 하면 po도 파일 형태로 처리되어 전송된다. @RequestPart를 적용해야한다.
이 때 consumes에 MediaType.MULTIPART_FORM_DATA_VALUE만 지정하면 Swagger에서 Schema를 볼 수 없다. po 타입 안에 @Schema를 사용하여 설명들을 적어놨는데, 이런 스펙에 대한 설명이 모두 사라지게 되면 Swagger를 사용하는 의미가 없게 된다.
해결책(미봉책..?)
consumes에 APPLICATION/JSON 타입도 추가해주고 Swagger에서 요청을 보낼때는 multipart/form-data, 스키마를 확인할 때는 application/json으로 한다.
728x90
반응형
'Programming-[Backend] > SpringBoot' 카테고리의 다른 글
[TIL] @JsonInclude: 응답 객체 json의 끝부분이 깨질 때 (0) | 2025.01.02 |
---|---|
CircuitBreaker: Resilience4j - 지연 및 실패 전파 방지하기 (3) | 2024.12.15 |
testcontainer 자바 도커 컨테이너 테스트: @ExtendWith, @DirtiesContext (1) | 2024.06.02 |
Mapstruct 기능 기록 uses, expression, @Named, qualifiedByName (0) | 2024.05.26 |
@SpringBootApplication 이해하기 (0) | 2022.06.02 |