강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của mollder822704
mollder822704

câu hỏi đã được viết

MVC mùa xuân

기선님 엑셀 다운로드 기능을 만들고 있는데 해결하기 어려운 에러가 생겨서 질문 드립니다.

Viết

·

373

1

안녕하세요 기선님

제가 현재 엑셀 다운로드 기능을 구현하고 있습니다.

컨트롤러 코드는 이렇게 되어 있습니다.

initExcelData() 함수는 테스트용 데이터를 만드는 함수입니다.

그리고 아래는 AbstractXlsxView를 상속받아서 만든 ExcelXlsxView 객체입니다.

제 생각에는 이 객체가 View 인터페이스를 구현한 객체이기 때문에

이 객체를 빈으로 등록하면

BeanNameViewResolver로 뷰를 받을 수 있다고 생각했습니다.

그런데 아래와 같이 에러가 생겼고

갑자기 타임리프 뷰리졸버에서 에러가 생긴것 같아서

스프링 애플리케이션을 실행시키면서 뷰 리졸버 순서도 확인해보았는데

BeanNameViewResolver 가 ThymeleafViewResolver보다 앞이여서

이제 어떻게 이 문제를 해결해야 될지 막막합니다.

정답이 아니더라도 앞으로 어떻게 이 문제를 해결해 나가면 좋을 것 같은지 조언해주시면 감사하겠습니다.

javaspringMVC

Câu trả lời 2

1

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

일단 이유는 0순위에 있는 ContentNegotiatingViewResolver 때문입니다. 그 뷰에 대해서는 나중에 좀 더 공부해 보시길 바랍니다.

문제를 해결하는 방법은 여러가지가 있는데 해당 요청 핸들러에서 문자열을 리턴하는게 아니라 해당 뷰 객체를 리턴하는 방법이 있습니다. 그러면 굳이 문자열로 해당 뷰 객체를 찾는 ViewResolver를 거치지 않아도 되며 개발자가 보기에도 직관적인 코드가 되기 때문에 저는 개인적으로 이 방법을 더 선호합니다만.. 

지금처럼 문자열을 리턴하고, ViewResolver를 사용해서 찾게 하고 싶다면 @GetMapping에 produces를 추가해서 CNVR이 이 요청에 대한 응답을 보여줄 뷰로 엑셀 뷰를 찾도록 알려줘야 합니다. 지금은 아무런 정보가 없어서 기본 뷰인 타임리프 뷰 리졸버를 사용한것으로 보이네요. 

@GetMapping(value = "/excel", produces = "application/vnd.ms-excel")

이런식으로 엑셀 뷰 헤더 정보를 추가해주면 찾아줄겁니다.

0

woody님의 프로필 이미지
woody
Người đặt câu hỏi

감사합니다. ㅜ ㅜ 뷰리졸버에 대해서 좀 더 공부를 해봐야겠네요 

Hình ảnh hồ sơ của mollder822704
mollder822704

câu hỏi đã được viết

Đặt câu hỏi