Spring에서 엑셀파일이 읽어질까?

JIHYE·2022년 5월 4일
0
post-thumbnail

요구사항

회원의 아이디정보를 담은 엑셀파일 또는 리스트를 스프링으로 가져와서 여러가지 처리를 해보려한다

과정

엑셀파일을 리스트로 변환해서 리스트든 엑셀이든 한방에 처리하는 로직으로 짜면 되겠다! 라는 생각으로 excelToList를 꿈꿨다 (참 달콤한 꿈이었지...😱 )

먼저 엑셀파일을 받아오려면 당연히 MultipartFile 형식으로 받아와야했다
나는 파일 한개만 받아올거니까 리스트 노노

컨트롤러에서는 @RequestParam 어노테이션을 사용하여 받아오면 쌉가능 😆
거기다 추가적인 정보는 Json으로 받아올거니까 나머지 requestDto의 내용은 @RequestBody로 받아왔다

requestDto에는

  • List<String> userIdList
  • Boolean chooseId
  • String target

등등 이런 정보들이 담겨있었다

이렇게 쉽게 성공했으면 오랜만에 블로그에 글을 남기지도 않았겠지...😵

@RequestParam 과 @RequestBody 는 함께 쓰일수가 없었다
계속 UTF-8 이 어쩌고 저쩌고 에러를 퉤퉤 한다

Content type 'multipart/form-data;boundary=----...;charset=UTF-8' not supported

그래서 기억속에 숨어있던 @ModelAttribute를 꺼내보았다
당연히 너무 잘되징 😝

근데 이렇게 쉽게될리가 없었다..

엑셀 파일이 아닌 리스트로 회원의 아이디를 받아오면 다 Null값으로 가득차버렸다...
Null의 향연에 망연자실하고있었는데, 새로운 친구 @RequestPart가 나타났네?

얘를 쓰면 파일이랑 dto 다 처리할수있다는 소식을 듣고 바로 적용했으나..

나에게는 맞지않는 방법이었다

이것도 config가 어쩌고 저쩌고 또는 Required request part 'xxx' is not present 오류를 뱉어댔다

문제를 정리하자면

  1. RequestParam(MultipartFile), RequestBody(RequestDto) 조합
  • 에러 퉤퉤
  • 애초에 불가능한 조합
  1. RequestParam(MultipartFile), ModelAttribute(RequestDto) 조합
  • 엑셀파일 잘 읽어옴
  • requestDto에 값도 잘 파싱해옴
  • 엑셀파일 말고 리스트로 정보 받아오면 파싱 불가능
  1. RequestPart(MultipartFile), RequestPart(RequestDto) 조합
  • 얘도 파싱못함
  • config 어쩌고 에러가 뜸
  • 그 config 중에 내가 필요한 설정내용은 없음

그나마 2번 조합을 사용했을때 한가지 기능이라도 하니까 저 기능을 쓰고싶었다
너무나...
진심으로....
데드라인이 코앞으로 다가오는데 나는 개발을 마무리 못하다니
응애로서 있을 수 없는 일이다 👧🏻

지난 밤 새벽 1시까지 이것 저것 시도했지만 모두 다 실패했다...
그래서 아침에 다시 시도해보다가 의문이 들었다

2번은 왜 되지...?
이유가 있을텐데...

https://www.instagram.com/toshimee/

출처 : https://www.instagram.com/toshimee/

그 이유는 간단했다
MultipartFile을 프론트에서 보내줄때는 content type을 multipart/form-data 으로 보냈다
그런데 파일없이 리스트로 보내줄때는 content type이 application/json 이었다..
그래야 파싱이 될테니까

근데 @ModelAttribute는 application/json으로 보내면 못읽는다
난 그거 몰랐다 😩
그래서 null로 가득했던것이다

@ModelAttribute는 content type이 multipart/form-data 일때만 파싱이 가능한 친구였다
그래서 못읽는거였다

내가 프론트를 바꿀 수 없으니 spring을 수정해야하는데 방법이 없는거다
그래서 선택한 나의 방법은 controller 나누기...

유지보수는 미래의 나에게 맡기고 MultipartFile을 보낼 때그 외 로 나누어서 controller를 만들어주었더니 잘 되더라

어이없게 🫥

그래서 내가 뭘 배웠냐면

아 Spring 개쩐다
나는 한낱 조무래기구나
나도 이제 토비선생님을 만나뵈야겠구나 등등

3개월이 막 지난 응애에게 큰 시련이라면 큰 시련이였던 지난 12시간이었다

Spring으로 파일과 리스트를 동시에 처리할 방법도 찾아내고 싶지만 그것은 미래의 나에게 맡긴다

profile
초보개발자의 개발일기

0개의 댓글