티스토리 뷰
전 회사에서 Spring boot로 구축 시 모든 IN/OUT을 Api 문서 없이 Swagger로 적용하기로 했기에 들어오는 변수나 나가는 변수 모두를 VO로 작성해야만 했습니다. 다른 부분은 모두 문제없이 해결했는데 문제가 되는 부분은 바로 Multipart 였습니다. 파일을 넘겨야 하는데 @RequestParam 어노테이션으로 처리하면 Swagger에서는 json만 뜨고 멀쩡히 File upload가 안되고 @RequestPart로 하라고 해서 했더니 'org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found' 와 같은 에러만 떨어졌습니다. 찾다 찾다보니 아래와 같은 방법이 있었습니다.
1. FileController(파일 처리하는 컨트롤러)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package com.be.common.controller;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.be.service.FileService;
import com.be.vo.FileVo;
import com.be.vo.ResponseVo;
@RestController
@RequestMapping("/file")
@Tag(name = "파일 API", description = "파일에 쓰일 API 주소")
public class FileController {
@Autowired
private FileService service;
@PostMapping(path = "/uploadfile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "파일 업로드 API")
public ResponseVo uploadfile(@ModelAttribute @Valid FileVo fileVo) throws Exception {
return service.saveMultifileRes(fileVo);
}
}
|
cs |
2. FileVo(파일을 받을 Vo)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.be.common.vo;
import java.util.ArrayList;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title = "파일 Vo")
public class FileVo {
private String flId;
private String seq;
private String upPath;
@Schema(title = "멀티파트 File Arrya", description = "멀티 파트 File Array")
private ArrayList<MultipartFile> files;
private String flNm;
private String flSize;
}
|
cs |
위와 같이 ModelAttribute로 처리하게 되면 문제가 발생하지 않게 됩니다. 참고로 FileVo를 그대로 Response로 내리면 error가 발생하니 MultipartFile을 Null처리하던거 해서 비워주는 처리가 필요하니 참고하시기 바랍니다.
'IT > Framework' 카테고리의 다른 글
Spring boot 3.0.0 기행기(1) - open api(springdoc) 적용 (0) | 2022.10.14 |
---|---|
Vue 2.6.0 - Menu를 Server에서 받아 동적으로 처리하기 (0) | 2022.06.25 |
Spring boot 2.3.12 - Open Api 3.0 (Swagger 3.0) Server 오류 (0) | 2021.07.18 |
Spring boot 2.3.12 - Open Api 3.0 (Swagger 3.0) 시큐리티 분리 적용 (2) | 2021.07.05 |
Spring boot 2.2.8 - Encoding Filter 설정 (0) | 2020.07.26 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday