Java/Spring Boot
Ajax를 통해 파일과 Json 업로드 후 Controller로 받기
요술공주밍키
2023. 5. 12. 17:40
항상 Ajax를 통해 정보를 전송할 때 json만 전송하다 보니 파일과 함께 어떻게 보내는지 삽질을 좀 했다
하지만 늘 그랬듯이 삽질을 하고 내용을 정리하니 이게 이렇게 긴 시간을 잡아먹었어야 했는가 싶다
🟧 Ajax & Spring boot Controller
⏹️ Ajax
const pdfFile = $("#pdfFile")[0].files[0];
const jsonFile = $("#jsonFile")[0].files[0];
const formData = new FormData();
formData.append("files", pdfFile);
formData.append("files", jsonFile);
formData.append("json", new Blob([JSON.stringify(data)], {type: "application/json"}));
$.ajax({
url: "등록 컨트롤러 URL",
method: "post",
data: formData,
contentType: false,
processData: false,
enctype: "multipart/form-data",
success: function(result) {
alert("등록 성공");
location.reload();
},
error: function(xhr) {
console.log(xhr);
}
});
따로 준비해둔 Data는 위와 같이 만들면 컨트롤러에서 Map<String, Object> 혹은 DTO, VO로 전달받을 수 있다
⏹️ Controller
@ResponseBody
@PostMapping("URL")
public void postCreateDoc(@RequestPart Map<String, Object> json,
@RequestPart MultipartFile[] files) {
// 컨트롤러 로직 작성
}
위와 같이 컨트롤러를 작성해주는데 json이나 files 같이 인자의 이름은 Ajax에서 전달하는 formData의 이름과
맞춰야 한다.
지금와서 생각하니 너무 간단하다..