springframework

JsonView

Jungsoomin :) 2020. 10. 14. 23:08

사실 @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