사실 @ResponseBody 로 mappingJackson2HttpMessageConverter 를 사용해서 json 데이터만 보내봤지 JsonView 를 써본적은 처음이다.
InternalResourceViewResolver 의 순위보다 BeanNameViewResolver 가 앞에 있다. 즉 우선순위에 따라
빈으로 등록된 View 클래스가 있을경우 해당 빈의 이름을 가진 View 객체를 리턴한다.
이것으로 보아 jsonView 를 ViewCode 로 넘겨주면 JsonView 객체가 나온다는 것을 유추할 수 있게 됬다.
<beans:bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="0"></beans:property>
</beans:bean>
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="1"></beans:property>
</beans:bean>
<!-- To ExcelParse -->
<beans:bean id="excelDownloadView" class="com.excel.util.ExcelDownloadView"/>
<!-- jackson view -->
<beans:bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<beans:property name="contentType" value="application/json;charset=UTF-8"/>
</beans:bean>
이렇게 abstractView 객체를 상속하여 bean 으로 등록하고서 해당 빈이름의 뷰코드를 컨트롤러에서 리턴하는 것이다.
// 커스텀 뷰 객체를 만들떄 사용
public class ExcelDownloadView extends AbstractView{
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
이런 식으로.
@Controller
public class ExcelController {
@Autowired
ExcelService excelService;
@RequestMapping(value = "/downloadExcelFile", method = RequestMethod.POST)
public String downloadExcelFile(Model model) {
String[] names = {"자몽", "애플망고", "멜론", "오렌지"};
long[] prices = {5000, 10000, 7000, 6000};
int[] quantities = {50, 50, 40, 40};
List<Fruit> list = excelService.makeFruitList(names, prices, quantities);
//엑셀 객체
SXSSFWorkbook workbook = excelService.excelFileDownloadProcess(list);
System.out.println(workbook);
model.addAttribute("locale", Locale.KOREA);
model.addAttribute("workbook", workbook);//엑셀파일 저장
model.addAttribute("workbookName", "과일표");//엑셀제목 저장
return "excelDownloadView";
}
@RequestMapping(value = "/uploadExcelFile", method = RequestMethod.POST)
public String uploadExcelFile(MultipartHttpServletRequest request, Model model) {
MultipartFile file = null;
Iterator<String> iterator = request.getFileNames();
if(iterator.hasNext()) {
file = request.getFile(iterator.next());
}
//파일 이름을 가지고 업로드 진행
List<Fruit> list = excelService.uploadExcelFile(file);
list.forEach( item -> System.out.println(item));
model.addAttribute("list", list);
return "jsonView";
}
}
'springframework' 카테고리의 다른 글
Web Mvc (0) | 2020.10.08 |
---|---|
o.s.w IoC 핵심기술. Null-Safety (0) | 2020.09.19 |
o.s.w IoC 핵심기술. @AOP (0) | 2020.09.19 |
o.s.w IoC 핵심기술. 프록시 기반의 AOP (0) | 2020.09.17 |
o.s.w IoC 핵심기술. AOP 개요. (0) | 2020.09.17 |